以前は、コンテナは開発環境だけ導入するのが主流だったのですが、ECSにより本番環境でも導入する事例が増えてきています。
コンテナがない場合
ローカル環境
開発環境の構成のメンテナンスが大変
開発環境、ステージング環境
テストの需要がバラバラで管理が大変
本番環境
オートスケールや、ノード障害対応が大変
全体
ローカル、開発、ステージング、本番全ての環境に差異がある。
Dockerをローカル以外の環境に導入するメリット
開発環境で作ったdocker imageを本番環境でも使えるので品質向上及び、構築時間短縮になる。
VMなどに比べて起動が100倍以上早く冗長性が高くなる。
オンプレ+クラスタという構成のクラスタも作りやすいためコストダウンになる。
kubenetesを使えば、冗長性を高める仕組みを自動化できる。
Dockerをローカル以外の環境に導入するデメリット
DBなどの永続化ができないのでバックアップなどの工夫が必要
VMよりも管理の単位が広くなる(VMならインスタンス単位だが、コンテナの場合Pod単位になる。)
新しい技術のため熟知したエンジニアが少なく、事例も少ない。
Dockerをローカル以外の環境に導入する上での課題
どうやってフェイルオーバーする?(待機系と稼働系を切り替える?)、スケールする?
クラスタ管理を導入する必要がある。
具体的には以下のようなことを意識する。ただ、これを自前でやろうとするとかなり大変になる。
- インスタンス群の状態を管理
- どこでどのコンテナを動かすか決めて実行
- コンテナ群の状態を管理
ECSの導入
EC2インスタンス群を簡単にDocker実行環境に変身させられる。
ECS Agentをインストールするだけで済み、管理インスタンスは不要
1コンテナから数万コンテナ以上を管理
開発環境から本番環境までこれ一つで管理
AWSの他のサービスとの連携が簡単
- CloudFormationでデプロイが可能
- ALB連携ができる。
DockerデーモンをEC2で使う。
本格的なアプリならECSやEKSなどを検討した方が良いでしょうが、アクセスがそんな見込めない簡易的なアプリケーションであればEC2上で運用しても問題ないでしょう。その手順をまとめておきます。
dockerデーモンをインストールする。
yumアップデートをしてパッケージを最新化します。
1 |
sudo yum update -y |
Dockerデーモンをインストールします。(amazon linux2のみ)
1 |
sudo amazon-linux-extras install docker |
Dockerサービスをスタートさせます。
1 |
sudo service docker start |
ec2-userをDockerグループに所属するように変更します。
1 |
sudo usermod -a -G docker ec2-user |
一旦ログアウトします。
1 |
exit |
dockerデーモンがちゃんとインストールされたか下記コマンドで確認します。
1 |
docker info |
docker hubにログインする。
下記コマンドを実行してユーザー名とパスワードを入力します。
1 |
docker login |
この記事へのコメントはありません。