ECRリポジトリにプッシュしたイメージをECS Fargateで起動する

Dockerfileから作成したイメージをECS Fargateでコンテナ起動してみました!
2021.09.30

こんにちは!コンサル部のinomaso(@inomasosan)です。

今回はDockerfileから作成したイメージをECRにプッシュし、ECS Fargateでコンテナ起動を試していきます。

環境

今回実行した環境は以下の通りです。

  • macOS Big Sur 11.6
  • Docker Desktop 4.0.0  

Dockerfileからイメージ作成

Dockerfile作成

今回はApacheに静的コンテンツを追加したイメージを作成します。

とりあえず表示できれば良いので、適用なHTMLファイルを作成します。

inomaso.html

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>

<body>
    <h1>どうもinomasoです!</h1>
</body>

</html>

次にDockerfileを作成します。
ベースイメージのApacheにローカルで作成したinomaso.htmlをコピーするよう記述します。
ちなみに、Dockerfileとinomaso.htmlは同じディレクトリに作成しています。

Dockerfile

FROM httpd:2.4
COPY ./inomaso.html /usr/local/apache2/htdocs/

コンテナイメージ作成

元となるファイルは作成できたのでコンテナイメージを作成します。
上記ファイルのあるフォルダに移動し、以下のコマンドでmy-apacheという名前のイメージが作成されます。

% docker build -t my-apache .

以下のコマンドでイメージが作成されたことを確認します。

% docker image ls | grep my-apache

ローカル環境で確認

ちゃんと想定通りに作成できた確認するために、ローカル環境で実行します。
今回は1回限りの実行で十分なので、コンテナの終了時に自動的にコンテナをクリーンアップし、ファイルシステムを削除するようにします。

% docker run --rm -p 80:80 my-apache

コンテナを起動できたら、Chrome等のWebブラウザにてhttp://localhost/inomaso.htmlへアクセスし、どうもinomasoです!と表示されることを確認します。

ECRにコンテナイメージをプッシュ

ECRプライベートリポジトリ作成

AWSマネージメントコンソールのECSコンソールから、Amazon ECRリポジトリをクリックします。

今回はイメージを誰でも利用できないように、IAMを利用して制御するプライベートリポジトリで作成します。 プライベートタブが選択されていることを確認し、リポジトリを作成をクリックします。

リポジトリの可視性にプライベートがチェックされていることを確認し、リポジトリ名に適当な名前を入力します。

リポジトリにコンテナイメージプッシュ

先ほど作成したリポジトリを開き、プッシュコマンドの表示をクリックします。

プッシュコマンドの例が表示されるので、参考にしてコマンドを実行していきます。

まずはDockerクライアントの認証を実行します。

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin [ACCOUNT ID].dkr.ecr.ap-northeast-1.amazonaws.com

コンテナイメージは既に作成済みのため、リポジトリにイメージをプッシュするためにタグをつけます。

docker tag my-apache:latest [ACCOUNT ID].dkr.ecr.ap-northeast-1.amazonaws.com/my-image:latest

ECRリポジトリにコンテナイメージをプッシュします。

docker push [ACCOUNT ID].dkr.ecr.ap-northeast-1.amazonaws.com/my-image:latest

AWSマネージメントコンソールに戻り、該当イメージがプッシュされたことの確認します。
またECSのコンテナ定義で使用する、イメージURIをメモしておきます。

ECS Fargateでコンテナ起動

ECS FargateでECRリポジトリのイメージからコンテナ起動

ECS Fargateの設定について、コンテナ定義のイメージ指定以外は、下記ブログをご参照願います。

コンテナ定義のイメージ指定については、先ほどメモしたイメージURIを指定します。

Apache表示確認

タスクのパブリックIPを確認し、Chrome等のWebブラウザにてhttp://タスクのパブリックIP/inomaso.htmlへアクセスし、どうもinomasoです!と表示されることを確認します。

まとめ

Dockerfileから作成したイメージをECRにプッシュし、ECS Fargateで動かすことができました。 ちょっとずつECS関連の機能を試して理解を深めていこうと思います、

この記事が、どなたかのお役に立てば幸いです。それでは!