aws-cliでdockerイメージをローカルからECRへpushする
macで動かしています。
aws-cliのコマンドは、
ローカルに既にaws-cliがある場合は
aws
で動かせますが、
aws-cliがない場合は、docker環境があれば公式コンテナを使って
docker run --rm -it amazon/aws-cli command
でも動かすことができます。
今回使ったaws-cliのバージョンは2.1.24
~ % docker run --rm -it amazon/aws-cli --version
aws-cli/2.1.24 Python/3.7.3 Linux/4.19.121-linuxkit docker/x86_64.amzn.2 prompt/off
ローカルからECRのプライベートリポジトリへdockerイメージをpushする流れは、
- docker build
- aws-cliでECRへログイン
- docker push
参考
docker build
dockerにタグを付けながらbuildしてイメージを作成します。
以下のように、aws_account_id
とregion
とリポジトリ名
を用いたタグをつける必要があります。
docker build -t aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app .
例えば
aws_account_id: 1111111111
region: ap-northeast-1
pushしたいECRのリポジトリ名: test-image
の場合は
docker build -t 1111111111.dkr.ecr.ap-northeast-1.amazonaws.com/test-image .
となります。
aws-cliでECRへログイン
docker login
することでpush先のレジストリを変えることができます。
デフォルトはDocker Hubとなっています。
今回はECRへpushするのでECRへログインします。
ECRにログインするためのユーザーネームとパスワードは何か?というと以下になります。
ユーザーネームはAWS
パスワードは認証トークン
この認証トークンを取得するのにaws-cliを使います。
docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli ecr get-login-password
ローカルの.aws/
にcredentials
とconfig
がある前提です。
// credentials
[default]
aws_access_key_id=xxxxxxxxxxxxxxxxxxxxxxxxxxx
aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
// config
[default]
region=ap-northeast-1
output=json
--password-stdin
という標準入力を利用できるオプションがあるので
docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli ecr get-login-password \
--region <region>
| docker login \
--username AWS \
--password-stdin \
<aws_account_id>.dkr.ecr.<region>.amazonaws.com
get-login-password
で得たトークン文字列をdocker loginのpasswordとして使うことができます。
Login Succeededと表示されるとログイン成功です。
docker push
docker push [オプション] 名前[:タグ]
docker push
をすると、dockerイメージをDocker Hubやレジストリに共有できるようになります。
前述のdocker login
でECRへログインしている状態なので、pushすることでECRへpushできます。
docker push 1111111111.dkr.ecr.ap-northeast-1.amazonaws.com/test-image