見出し画像

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の起動を確認できます。

スクリーンショット 2020-11-20 21.20.53

docker-compose down を実行して、コンテナを終了します。

次に、contextにmyecscontextを使用して、docker compose up (ハイフンなし)でコンテナを起動します。

$ docker context use myecscontext
$ docker compose up

起動まで約4分かかりました。

スクリーンショット 2020-11-20 21.47.58

docker compose ps を実行すると、PORTSにURLが表示されます。これをコピーしてブラウザで表示します。

スクリーンショット 2020-11-20 22.03.21

ローカル環境と同じ結果になりました。

AWS マネジメントコンソールでも状態を確認することが出来ます。

スクリーンショット 2020-11-20 22.17.01

docker compose down を実行して、コンテナを終了します。

まとめ

Amazon ECSは、こちらのURLからGUI的にコンテナを起動することもできますが、Dockerコマンドで、ローカル環境と同じような感覚で、コンテナを操作できるのは楽ですね。

それと、AWSのコンテナを削除するには、GUIの場合、あれこれと操作が必要なのに対し、Dockerコマンドの場合、一発できれいに削除してくれるので、(課金の心配もなくなり)安心です。


この記事が気に入ったらサポートをしてみませんか?