Docker ComposeでAmazon ECSにDeployする
Docker Composeというコマンドで、ローカル環境と同じような感覚で、AWS上にコンテナをDeployして動かすことが出来ます。
ローカルの場合は、docker-compose up (ハイフンあり)、AWSの場合は、docker compose up (ハイフンなし)。違いが微妙すぎて、最初混乱しました…。
実行環境
Docker Desktop for Mac version 2.5.0.1(49550)
macOS Catalina version 10.15.7
マニュアル
https://docs.docker.com/engine/context/ecs-integration/
操作手順
上記マニュアルに沿って、まずは、AWSのAccessKeyを作成します。その次に、AWS用のcontext (マニュアルに沿って"myecscontext")を作成します。
最初はこう(*の方が使用中のcontextになります)
$ docker context ls
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default * moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
myecscontext ecs (ap-northeast-1)
切り替えるとこう
$ docker context use myecscontext
$ docker context ls
NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR
default moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
myecscontext * ecs (ap-northeast-1)
サンプルとして、簡単な docker-compose.yml を使用します。
AWSにDeployするときの制約として、Dockerfileからのbuildではなく、Dockerのimageを指定する必要があります。
docker-compose.yml
version: "3"
services:
nginx:
image: nginx
ports:
- "80:80"
まず、contextにdefaultを使用して、docker-compose up (ハイフンあり)でコンテナを起動します。
$ docker context use default
$ docker-compose up
http://localhost:80/ にアクセスするとNginxの起動を確認できます。
docker-compose down を実行して、コンテナを終了します。
次に、contextにmyecscontextを使用して、docker compose up (ハイフンなし)でコンテナを起動します。
$ docker context use myecscontext
$ docker compose up
起動まで約4分かかりました。
docker compose ps を実行すると、PORTSにURLが表示されます。これをコピーしてブラウザで表示します。
ローカル環境と同じ結果になりました。
AWS マネジメントコンソールでも状態を確認することが出来ます。
docker compose down を実行して、コンテナを終了します。
まとめ
Amazon ECSは、こちらのURLからGUI的にコンテナを起動することもできますが、Dockerコマンドで、ローカル環境と同じような感覚で、コンテナを操作できるのは楽ですね。
それと、AWSのコンテナを削除するには、GUIの場合、あれこれと操作が必要なのに対し、Dockerコマンドの場合、一発できれいに削除してくれるので、(課金の心配もなくなり)安心です。
この記事が気に入ったらサポートをしてみませんか?