ECRにイメージを登録

ECS はクラスタ上でコンテナ実行しますが、その元となる Docker イメージは別の場所から取ってくる必要があります。
今回は、Cloud9 で作成したイメージを Elastic Container Registry (ECR) と呼ばれるサービスに登録します。

コンテナイメージを保管する場所を イメージレジストリ と呼びます。Docker イメージを確実に pull できないと、コンテナを安定して動作させることが出来ないので、レジストリには高い可用性とスケーラビリティが求められます。


ECRレポジトリの作成

マネージドコンソールで ECR を開きます。

今回使用するECRリポジトリを作成します。新しいバージョンではオプションがいくつか増えていますが、リポジトリ名のみ入力して残りはデフォルトのままで構いません。

プッシュコマンドの表示 を選択すると下の画面なるので、メモ帳などにコマンドを全てメモします。


ECR への Docker イメージの Push

ここで、Cloud9 タブに戻り、作成した Docker イメージを ECR にアップロードしていきます。

Cloud9 の画面を消してしまった方はマネージドコンソールの Cloud9 から再度開くことができます。

ECRの画面でメモをしたコマンドをそのまま順番に実行します。

下記コマンドは一例です。プッシュコマンドの表示 でコピーしたコマンドを1つづつペーストして実行します。

まず、Cloud9 の環境から ECR にログインを行います。

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com

Login Succeeded と出たら、コンテナイメージをビルドし、tagを付けます。

docker build -t {ユーザ名}-rails-container .
docker tag {ユーザ名}-rails-container:latest {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/{ユーザ名}-rails-container:latest

最後に、タグ付けされたイメージを ECR に push します。

docker push {アカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/{ユーザ名}-rails-container:latest

これで ECR へ Rails アプリケーションの Docker イメージが登録できました。


ECR コンソールでのイメージ確認

再度、ECR コンソール画面に戻ってイメージを確認します。イメージ URI は後ほど利用するのでコピーしておきます。

いよいよEC2上で Docker コンテナを動かす準備ができました。

アプリケーション改修のたびに、Docker イメージをビルドしなおして、ECRにプッシュするのは大変です。
AWS の Code シリーズのサービスを使うことでこのような処理を 自動化 するパイプラインを構築することができます。 https://aws.amazon.com/jp/blogs/news/build-a-continuous-delivery-pipeline-for-your-container-images-with-amazon-ecr-as-source/