Dockerイメージの検証、更新する手順

できればインフラ構成についてもコード化したいため、CodeBuildのbuildspecでECSの設定を記述/更新しています。

このため、ECSの設定画面でポチポチと変更、検証することも可能ですが、Githubへのpush、CodeBuildで更新がかかると、ECSへの変更も元に戻ります。 (検証のために、ちょっとだけECS側で変更するのは無害です)

恒久的な変更はCodeBuild側へ変更するようにしましょう。

下記の手順はローカルでDockerイメージをダウンロードして検証する方法です。 「こうすると効率が良かった」というレベルのものです。

作業の流れ

  • ECRからイメージダウンロード
  • Mac上でコンテナを起動し、いろいろ検証( Dockerfileに必要な変更の検討など )
  • 必要な修正が決まったら、Githubのtestブランチにpush
  • Githubの testブランチへpushされるとCodeBuildでdocker buildが始まり、ECRにpushされる
  • ECRのDockerレポジトリのイメージIDをメモ
  • ECSで起動しているコンテナを変更して動作確認を行う という流れになります。

イメージをローカルにダウンロードする

プライベートなDockerレポジトリ(ECR)への認証を済ませる必要があります

認証情報の取得

eval (aws ecr get-login –profile=profile名 –no-include-email –region ap-northeast-1)

手元で実行

(2019/02/22の内容で、環境変数などは将来的に変更する可能性があります)

docker run -p 10022:22 -e GITHUB_ENV=env25  -e AWS_ACCESS_KEY_ID=XXXXXXXXXXX -e AWS_SECRET_ACCESS_KEY=YYYYYYYYYYYYYY -it 11111111.dkr.ecr.ap-northeast-1.amazonaws.com/image-name:latest /bin/bash

-p 10022:22 : リモートにSSHログインできるようにdocker内にsshdを立てました(将来的にはssmに切り替えたいですが)、sshdがlistenするポートが22番ポートなのですが、これをMacの10022にポートフォワードしています

-e GITHUB_ENV=env25 : ECSで「どの環境を更新するか」を指定しています(Githubの「どのブランチを読み込むのか?」にも使っています)

-it : Dockerコンテナに入ってCLIを利用したい時に使うオプションです

111111.dkr.ecr.ap-northeast-1.amazonaws.com/php-fpm:latest : 最新イメージの場合はlatestを指定しますが、トラブルシューティングの時には必要なタグを指定してください

/bin/bash : Dockerコンテナで実行するプログラムを指定します。今回はCLIをつかって調査したいので、/bin/bashを利用しています( /bin/bashをインストールしていないコンテナの場合は /bin/ash をお使いください )

検証が終わって「開発サーバ郡の標準のDockerイメージとして使いたくなった」ら

ECSで起動する際のdockerイメージですが、タスク定義で起動するDockerイメージのタグをstable 11111.dkr.ecr.ap-northeast-1.amazonaws.com/php-fpm:stable としています(デフォルトはlatestです)

ですので、ECSでの起動イメージを変更する場合は、 Dockerイメージのタグを変更します。

docker tag '11111.dkr.ecr.ap-northeast-1.amazonaws.com/php-fpm:latest'  '898115053391.dkr.ecr.ap-northeast-1.amazonaws.com/php-fpm:stable'
docker push '11111.dkr.ecr.ap-northeast-1.amazonaws.com/php-fpm:stable'

なぜ「参照するDockerイメージはlatestではなくstableにしているか?」の背景

以前はデフォルトのlatestで行っていたのですが、これだと、Dockerイメージの検証をしている(つまりlatestが検証中の)タイミング)で、 Githubにpushがあると、その開発環境も不安定なlatestに切り替わってしまいます。 これはDockerの検証のスピードを著しく下げます(開発者がいない時間にしか検証できない、とか、pushされるとイメージを昔のものに切り戻さないといけない、とか) このため別のタグを指定し、latestは自由に切り替わっても大丈夫なようにしています。

Dockerイメージのタグはどこで指定しているのか?

  • dockerイメージはECSのタスク定義で設定している
  • ECSタスク定義はCodeBuildのbuildspecで設定している ので、CodeBuildのbuildspecで設定してます。

ある環境だけ少し新しいDockerイメージを試したい

CodeBuild, ECSタスク定義の参照するイメージを変更してください。一時的な検証であれば

11111.dkr.ecr.ap-northeast-1.amazonaws.com/image-name:73f894773f8947 のようなイメージのIDで指定するのもありです。

User
CloudFront
ALB
EC2
RDS