こなメル

学習したことのメモや、趣味について

docker-compose.ymlで構築されたプロジェクトをECRにpushする & ECSで公開する

はじめに

この記事は、私がDocker Compose CLIを利用して、ECSでプロジェクトを実行するまでの手順をメモしたものです。
使用するプロジェクトは、以下のサンプルを利用しています。

github.com

前提

  • AWSアカウントがあること
  • IAMユーザーが作成されていること

AWS CLIをインストールする

docs.aws.amazon.com

AWS CLIの設定をする

docs.aws.amazon.com

ECRでリポジトリを作成する

f:id:konakomoti:20210919125748p:plain
リポジトリを作成」をクリック

f:id:konakomoti:20210919133507p:plain
リポジトリ名は、サンプルフォルダと同じ名前の example にします。それ以外はデフォルトのままで、「リポジトリを作成」をクリックします

サンプルをclone & docker-compose.ymlを書き換え

$ git clone https://github.com/docker/ecs-plugin.git
$ cd ecs-plugin/example/

imageを書き換えます。ECRの「プッシュコマンドの表示」から書き換えるタグ名を確認します。

version: "3.8"
services:
  frontend:
    build: app
    # ↓削除
    # x-aws-pull_credentials: <<<your arn for your secret you can get with docker ecs secret list>>>
    # ↓書き換え
    # image: <<<your docker hub user name>>>/timestamper
    image: 1111111111.dkr.ecr.ap-northeast-1.amazonaws.com/example:latest
    ports:
      - "5000:5000"
    depends_on:
      - backend
  backend:
    image: redis:alpine

f:id:konakomoti:20210919160042p:plain
リポジトリを選択した状態で「プッシュコマンドの表示」をクリック

f:id:konakomoti:20210919160239p:plain
書いてある場所

ローカルで確認する

$ docker-compose up

localhost:5000 にアクセスするとサンプルのサイトが見れます。

ECRレジストリに対し、Dockerクライアントを認証する

再度「プッシュコマンドの表示」をクリックし、

f:id:konakomoti:20210919160946p:plain
コピーして実行します

f:id:konakomoti:20210919161049p:plain
Login Successed と表示されればOK

exmapleリポジトリにイメージをpushする

$ docker-compose push

ECRのexmapleリポジトリにイメージがpushされていることが確認できます。 f:id:konakomoti:20210919161416p:plain

AWS用のコンテキストを作成 & 切り替え

今回は aws という名前にしました。

$ docker context create ecs aws

f:id:konakomoti:20210919161938p:plain
作成したaws profileを使用します

コンテキストが作成されているか確認し、

$ docker context list

'aws' に切り替えます。

$ docker context use aws

ECSへデプロイ

Docker Compose コマンド一覧はこちらに記載されています。

matsuand.github.io

※自分の環境では5分程度かかりました

$ docker compose up

コンテナの一覧を表示します。

$ docker compose ps

PORTSに表示されているURLからサイトを確認することができます。 f:id:konakomoti:20210919195356p:plain

コンテナとネットワークの停止 & 削除

※こちらも数分かかります

$ docker compose down

参考サイト

以下の記事を参考にさせていただきました。

tech.smartcamp.co.jp