LoginSignup
28
29

More than 1 year has passed since last update.

Docker Compose で ECS にアプリケーションをデプロイする

Last updated at Posted at 2021-09-12

初めに

本日 docker-compose を使ってみた記事を書いたので、AWS ECS でも使えないかと調べたところ、ブログで見つけました。いずれ使うときが来るかもしれないのでメモとして残しておきます。

こちらが AWS ECS に Docker Compose でアプリケーションをデプロイする公式ブログになります。

以下の記事も参考にしました。デプロイの詳細な手順について非常にわかりやすく書かれております。

準備

Linux で Docker Compose CLI を使用するための前提条件があります。

1 . Docker Desktop 最新版をダウンロードしインストールしていることが必要です。

  • Download for Mac
  • Download for Windows

あるいは Docker Compose CLI for Linux をインストールしていることが必要です。

2 . AWS アカウントを持っていることが必要です。

こちらのドキュメントを参考にインストールスクリプトを使用します。

curl -L https://raw.githubusercontent.com/docker/compose-cli/main/scripts/install/install_linux.sh | sh

AWS コンテキストの生成

このコンテキストにより AWS への認証を行います。aws configure コマンドで認証情報をローカルに登録後、以下のコマンドを実行します。

docker context create ecs myecscontext

なお、このコマンド実行時、以下のエラーが発生しました。インスタンスに再ログインしたところ、正常に動作しました。

"docker context create" requires exactly 1 argument. when docker context create ecs myecscontext is executed

An existing AWS profile を選択します。

[ec2-user@ip-172-31-39-188 compose]$ docker context create ecs myecscontext
? Create a Docker context using:  [Use arrows to move, type to filter]
> An existing AWS profile
  AWS secret and token credentials
  AWS environment variables

ECS へデプロイ

以下の記事で使用したアプリケーションを使用します。

編集前

docker-compose.yml
version: '3'
services:
  web:
    build: .
    ports:
     - "8080:5000"
    volumes:
     - .:/code
  redis:
    image: "redis:alpine"

編集後

docker-compose.yml
version: '3'
services:
  web:
    image: "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/web-app:latest"
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

flask イメージはビルドではなく、ECR にプッシュしておきます。

ポート番号を 5000:5000 に変更したのは、docker compose up コマンド実行時に以下のエラーが発生したためです。

published port can't be set to a distinct value than container port: incompatible attribute

コンテキストを切り替えます。

docker context use myecscontext

現在のコンテキストを確認するには docker context ls コマンドを実行します。

[ec2-user@ip-172-31-39-188 compose]$ 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

コンテキストを切り替えた後ですが、通常の docker コマンドは使用できなくなるようです。例えば docker ps は使えなくなりました。

[ec2-user@ip-172-31-39-188 compose]$ docker ps
Command "ps" not available in current context (myecscontext)

こういった場合、コンテキストをデフォルトに戻します。

docker context use default

compose コマンドで ECS ヘアプリケーションをデプロイします。

docker compose up

以下はコマンド実行中です。完了すると、すべて青色に変わり、ユーザー入力を受け付けるようになります。

image.png

デプロイの後、http://NLB の DNS 名:ポート番号 にアクセスします。これは例えば以下のような URL です。

http://compo-loadb-1grujljfn1mmd-06b3d6a23c13c06a.elb.ap-northeast-1.amazonaws.com:5000/

image.png

リソース削除には以下のコマンドを実行します。

docker compose down

AWS リソースの確認

docker compose up によって新規に作成されたリソースを確認します。VPC、サブネット、セキュリティグループはデフォルトのものが用いられていました。

  • クラスター

クラスター名ですが、ローカルマシンの docker-compose.yml ファイルが存在するディレクトリのディレクトリ名が付けられていました。

image.png

  • サービス

flask タスクと redis タスクのサービスがそれぞれ作成されています。

image.png

  • NLB

1.png

参考記事

28
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
29