「AWSコンテナ設計・構築[本格]入門」の「1章 コンテナの概要」のメモを残します。
コンテナとは
コンテナ=1つのプロセスとしてソフトウェアを実行する技術
OSとカーネルは共有して、プロセスを分けることでソフトウェアを隔離して起動している。
また、アプリケーションとランタイム、ライブラリをまとめて1つのパッケージとする。
コンテナ技術のメリット
- 環境依存からの解放
- アプリケーションの依存関係をコンテナ内に完結。
- 各環境でのライブラリのバージョン管理が不要。
- 環境構築やテストに要する時間の削減
- どの環境でも同じように動作するため、環境構築やテストが容易。
- リソースの効率化
- 1つのプロセスなので起動が速く、必要なリソースが少ない
Dockerとは
コンテナ技術を使用するためのツール。
他には、Podman、containerd、CRI-O などがある。
(参考:https://zenn.dev/ttnt_1013/articles/f36e251a0cd24e)
オーケストレータ
複数のコンテナを管理するためのツール。
機能としては、
- コンテナの配置管理
- ホストへの負荷が均等になるようにコンテナを配置
- コンテナの負荷分散
- リクエストを分散させ、可用性やパフォーマンスを向上
- LBと組み合わせたりもする
- コンテナの状態監視と自動復旧
- コンテナを監視し、異常があれば切り離しや自動復旧させる
- コンテナのデプロイ
- ダウンタイムがないようにデプロイする
オーケストレータのデファクトスタンダードは、Kubernetes。
AWSならEKS、GCPならGKEなど各クラウドプロバイダにマネージドサービスがある。
他のオーケストレータとしては、Docker社のSwarm、RedHat社のOpenShiftなど。
本書では、AWSが提供しているECSを取り扱う。
これはAWS独自のオーケストレータで、他のAWSサービスと相性がいい。
コンテナ技術を導入するために考慮すべきこと
- コンテナを前提としたアプリケーション開発の在り方
- コンテナ特有の性質を考慮する。
- クラウド×コンテナのベストプラクティスの1つがThe Twelve-Factor App
- コンテナ設計・運用に取り組む際の姿勢
- レジストリ上のイメージやオーケストレータの管理など新たなタスクが発生
- 加えて、従来通りの可用性、パフォーマンス、セキュリティの考慮も必要
- 開発チームにおける役割分担の見直し
- アプリチームとインフラチームの役割を見直す
次章のメモ
コメント