経緯
CircleCIを用いて、githubにpushしたコードを自動的にAmazonECSにデプロイされるようにしてみたかったので、いろいろ調査しました。
その過程で、AWS CLIを用いてのECRへのDockerイメージをpushする必要があったので、その調査結果を記録しておきます。
前提
AWS-CLIがインストール済みであることを前提とします。インストールされていない場合は、インストール方法はこちら。
公式ドキュメント:AWS CLI のインストールと設定(https://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-tutorial-cli-installation.html)
aws --version
戻り値:aws-cli/1.16.164 Python/3.7.3 Darwin/18.6.0 botocore/1.12.154など。
本編
以下、ECRへログインして、Dockerイメージをpushするまで。
公式ドキュメント:Amazon ECR で AWS CLI を使用する(https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/ECR_AWSCLI.html)
1. AmazonECRレジストリへのDockerログインコマンドを取得(12時間有効らしい)
aws ecr get-login --region ap-northeast-1 --no-include-email
ap-northeast-1は自分の使っているリージョン名に置き換えてください。
2. 以下のような戻り値が帰ってくるので、それをそのままコピペして実行。
docker login -u AWS -p eyJw...............................jh9 https://999988887777.dkr.ecr.ap-northeast-1.amazonaws.com
ただし、以下のようにすると、上記1、2を一度に実行できるので、上記1、2は不要です。
eval $(aws ecr get-login --region ap-northeast-1 --no-include-email)
3. テスト用イメージをローカルPCにPull。今回は、nginx公式シメージを使いました。
docker pull nginx
4. ECRレポジトリ作成。手動で作っておけばよいのですが、ついでにaws cliからやってみました。
aws ecr create-repository --repository-name nginx-test
nginx-testのところは自分が作りたいレポジトリ名に置き換えてください。
戻り値
{
"repository": {
"repositoryArn": "arn:aws:ecr:ap-northeast-1:999988887777:repository/nginx-test",
"registryId": "999988887777",
"repositoryName": "nginx-test",
"repositoryUri": "999988887777.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-test",
"createdAt": 1560058104.0
}
}
5. レポジトリにPush用にタグ付してPush
docker tag nginx:latest 999988887777.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-test:latest
前の方のnginx:latestのところ(tagの直後)は、ローカルのDockerイメージなので、適当な名前、タグ名に変えてください。
後ろの方のnginx-test:latestは先ほど作成したECRレポジトリ名と、pushするイメージに付けたいタグ名なので、適宜変えてください。
999988887777のところは、自分のIamユーザのACCOUNT_IDで置き換えてください。
ap-northeast-1は自分の使っているリージョン名に置き換えてください。
docker push 999988887777.dkr.ecr.ap-northeast-1.amazonaws.com/nginx-test:latest
以上です。