ECRにコンテナイメージをpushする方法
AWS ECR(Elastic Container Registry)とは、AWSにて用意されたPrivate Docker Resistryサービスです。今回は、ローカルで作成したコンテナイメージを、こいつにpushする方法を記載します。
事前準備
まず、pushするためのイメージをローカルのdocker環境に用意しておきます。hello-worldのイメージをpullしてきます。
> docker pull hello-world Using default tag: latest latest: Pulling from library/hello-world d1725b59e92d: Pull complete Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788 Status: Downloaded newer image for hello-world:latest > docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest 4ab4c602aa5e 37 hours ago 1.84kB
Docker Hubへのpush
ECRにpushする前に、おさらいとして、Docker HubのPrivateリポジトリにコンテナイメージをpushする方法を記載します。
まず、Docker Hubにログインします。 docker login
コマンドで接続先を指定しない場合、Docker Hubに接続されます。今回利用しているDocker Hubのアカウント名は goodbyegangster
になります。
> docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: goodbyegangster Password: Login Succeeded
続いて、Docker Hubのプライベートリポジトリにpushします。事前にDocker Hubにて、プライベートリポジトリを作成しておきます。作成手順はこちら。
Repositories | Docker Documentation
今回は private-hello-world
という名前のリポジトリを作成しています。
ローカル側のDockerにて、Docker Hubにpushするためのリポジトリを作成します。先ほどpullしてきたhello-worldイメージをコピー。
> docker tag hello-world goodbyegangster/private-hello-world:1.0 > docker images REPOSITORY TAG IMAGE ID CREATED SIZE goodbyegangster/private-hello-world 1.0 4ab4c602aa5e 37 hours ago 1.84kB hello-world latest 4ab4c602aa5e 37 hours ago 1.84kB
pushします。Docker Hubのレジストリへpushする時のファーマットは下記です。
$ docker push <hub-user>/<repo-name>:
> docker push goodbyegangster/private-hello-world:1.0 The push refers to repository [docker.io/goodbyegangster/private-hello-world] 428c97da766c: Mounted from library/hello-world 1.0: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
Docker Hubの該当リポジトリ画面に行けば、今pushしたイメージが登録されていることを確認できます。
ECRへのpush
で、次はECRのリポジトリにpushする方法です。
まず、ECRのdockerレジストリにログインする必要があります。ログイン用パスワードを確認するため、以下のAWS CLIコマンドを実行します。
> aws ecr get-login --no-include-email docker login -u AWS -p (password) https://(AWSアカウントNO).dkr.ecr.ap-northeast-1.amazonaws.com
実行すると、password情報を含んだdocker loginコマンドを返してくれます。このdocker loginコマンドを実行すると、ECRのレジストリへ認証が通ります。尚、AWS CLIコマンドを実行するIAMユーザには、ECRへのアクセスポリシーを付与しておく必要があります。どんなポリシーがあるかは、以下の公式マニュアルにて確認できます。
Amazon ECR 管理ポリシー - Amazon ECR
ECRへ認証は通りましたので、ECRのリポジトリ用のイメージを作成します。hello-worldのコンテナイメージを、ECRのリポジトリの仕様に沿ったイメージ名を作成。
<ecr-registry-name>/<repo-namespace>(optional)/<repo-name>:
(例)
xxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/team-a/private-hello-world 1.0
> docker tag hello-world xxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/team-a/private-hello-world:1.0 > docker images REPOSITORY TAG IMAGE ID CREATED SIZE (AWSアカウントNO).dkr.ecr.ap-northeast-1.amazonaws.com/team-a/private-hello-world 1.0 4ab4c602aa5e 2 days ago 1.84kB goodbyegangster/private-hello-world 1.0 4ab4c602aa5e 2 days ago 1.84kB hello-world latest 4ab4c602aa5e 2 days ago 1.84kB
準備ができたので、pushします。ECRのレジストリへpushする時のファーマットは下記です。
$ docker push <ecr-registry-name>/<repo-namespace>(optional)/<repo-name>:
> docker push (AWSアカウントNO).dkr.ecr.ap-northeast-1.amazonaws.com/team-a/private-hello-world:1.0 The push refers to repository [xxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/team-a/private-hello-world] 428c97da766c: Pushed 1.0: digest: sha256:1a6fd470b9ce10849be79e99529a88371dff60c60aab424c077007f6979b4812 size: 524
ECRのコンソールに行くと、コンテナイメージがpushされていることを確認できます。