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したイメージが登録されていることを確認できます。

f:id:goodbyegangster:20180924183909p:plain

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されていることを確認できます。