ローカルで作った Nginx のイメージを ECR にあげて Fargate で動かしてみる

参考

ローカルでイメージファイルを作成する

まずは docekr-compose を使って Nginx のイメージを作成してみます。
docker-compose.yml は次の通りです。

version: "3"
services:
  nginx:
    image: nginx:latest
    container_name: hogehoge_container
    ports:
      - "80:80"

コンテナ起動させます。

docker-compose up -d

コンテナにログインします。

docker exec -it hogehoge_container /bin/bash

せっかくなのでファイルを編集して Nginx の部分を hogehoge に変更してみます。

vi /usr/share/nginx/html/index.html

exit しコンテナからログアウトたら、コンテナからイメージを作成します。

docker commit hogehoge_container hogehoge_image

これで hogehoge_image:latest と言うイメージが出来上がりました。latest は、タグを指定すれば変更できます。

リポジトリを作成する

  1. ecs と検索して「elastic container service」をクリックする。
  2. サイドメニューの「リポジトリ」をクリックする。
  3. タブが「Private」になっているのを確認する。
  4. 「リポジトリを作成」をクリックする。
  5. 「リポジトリ名」に「hogehoge_repository」と入力する。
  6. 「リポジトリを作成」をクリックする。

イメージをプッシュする

  1. 一覧から「リポジトリ名」の「hogehoge_repository」をクリックする。
  2. 右上の「プッシュコマンドの表示」をクリックする。
  3. 「1. 認証トークンを取得し、レジストリに対して Docker クライアントを認証します。」の下の値をコピペで実行し認証する。
  4. 「2. 以下のコマンドを使用して、Docker イメージを構築します。...(略)...」の手順は、ローカルでイメージを作成したので飛ばす。
  5. 「3.構築が完了したら、このリポジトリにイメージをプッシュできるように、イメージにタグを付けます。」の下の値をコピーして、[イメージ名]:[タグ名]の箇所を作成したものに書き換えて実行する。※下記参照
  6. 「以下のコマンドを実行して、新しく作成した AWS リポジトリにこのイメージをプッシュします。」の下の値をコピペして実行する。
  7. 「閉じる」をクリックする。
  8. 「イメージタグ」の箇所が「latest」となっている項目が増えているのを確認する。

※ 上記 5 の変更箇所の例。

docker tag hogeohoge_repository:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hogeohoge_repository:latest
↓
docker tag hogehoge_image:latest xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hogeohoge_repository:latest

クラスターを作成する

  1. サイドメニューの「クラスター」をクリックする。
  2. 「クラスターの作成」をクリックする。
  3. 「ネットワーキングのみ」が選択されているのを確認する。
  4. 「次のステップ」をクリックする。
  5. 「クラスター名」に「HogehogeCluster」と入力する。
  6. 「VPC の作成」にチェックを付ける。(CIDR ブロックとサブネットはデフォルトのまま)
  7. 「作成」をクリックする。
  8. 「クラスター」の表示をクリックする。

タスクを定義する

  1. サイドメニューの「タスクの定義」をクリックする。
  2. 「新しいタスク定義の作成」をクリックする。
  3. 「FARGATE」が選択されているのを確認する。
  4. 「次のステップ」をクリックする。
  5. 「タスク定義名」に「hogehoge_task」と入力する。
  6. 「タスクメモリ (GB)」で「0.5GB」を選択する。
  7. 「タスク CPU (vCPU)」で「0.25vCPU」を選択する。
  8. 「コンテナの追加」をクリックする。
  9. 「コンテナ名」に「hogehoge_container」と入力する。
  10. 「イメージ名」に「xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hogeohoge_repository:latest」と入力する。(レポジトリ → イメージ → URI のコピーで値が取得できる。)
  11. 「ポートマッピング」に「80」と入力する。
  12. 「追加」をクリックする。
  13. 「作成」をクリックする。
  14. 「タスクの定義の表示」をクリックする。

サービスに登録する

  • サービスの設定
    1. サイドバーの「クラスター」をクリックする。
    2. 「クラスター名」の「HogehogeClasster」をクリックする。
    3. 「サービス」タブの「作成」をクリックする。
    4. 「FARGATE」にチェックを付ける。
    5. 「オペレーティングシステムファミリー」で「Linux」を選択する。
    6. 「タスク定義」で「hogehoge_task」と入力する。
    7. 「クラスター」が「HogehogeCluster」になっているのを確認する。
    8. 「サービス名」に「hogehoge_service」と入力する。
    9. 「タスクの数」に「1」と入力する。
    10. 「次のステップ」をクリックする。
  • ネットワーク構成
    1. 作成された VPC とサブネットがあるのでそれぞれ選択する。
    2. 「次のステップ」をクリックする。
  • Auto Scaling (オプション)
    1. 「サービスの必要数を直接調整しない」にチェックがついているのでそのままにする。
    2. 「次のステップ」をクリックする。
  • 確認
    1. 「サービスの作成」をクリックする。
  • 起動ステータス
    1. 「サービスの表示」をクリックする。

Fargate の Nginx が起動しているのを確認する

  1. サイドメニューの「クラスター」をクリックする。
  2. 「タスク」タブをクリックする。
  3. 「タスク」の ID をクリックする。
  4. 「ENI ID」の ID をクリックする。
  5. 該当するネットワークインターフェイスの「パブリック IPv4 アドレス」を確認する。
  6. 確認した IP アドレスをブラウザに入力する。
  7. 「hoehoge!...(略)...」と記載のある Nginx のページが開かれているのを確認する。