概要
AmazonECR(Amazon Elastic Container Registry)の使い方メモ。
パブリックなイメージだったら、hub.docker.comで良いと思うが、会社で使うイメージはプライベートなリポジトリが必要である。
Dockerが公式に出しているregistryコンテナを使えば、プライベートリポジトリを管理できるようだが、AWSではECRというマネージドのサービスがある。
今回はECRにリポジトリを作成して、イメージをPushする所まで。
リポジトリ作成
まず、AWSでECSの画面を表示し、リポジトリを選択。
次にリポジトリを作成を選択。
任意のリポジトリ名を設定する。role単位(example-app,example-phpなど)で作成。
これで作成完了。超簡単。画面下にイメージプッシュの手順が記載されている。
イメージのプッシュ
まずはECRへログインする。もちろん、自分のアカウントがECRにアクセスできる権限でないと駄目。
$(aws ecr --profile ここにプロファイル名 get-login --no-include-email --region ap-northeast-1)
Login Succeeded
手順だとprofile名抜けているので、初めてだとアクセスできなくて詰まるかもしれない。
自分で作成したDockerfileをビルドする。
docker build -t inamuu-test01 .
Sending build context to Docker daemon 7.68kB
Step 1/5 : From nginx:latest
---> 71c43202b8ac
Step 2/5 : MAINTAINER inamuu
---> Using cache
---> 6ad1e68f5596
Step 3/5 : COPY ./var/www/html /var/www/html
---> Using cache
---> 8fa5219e2db1
Step 4/5 : COPY ./etc/nginx/ /etc/nginx/
---> Using cache
---> 86b8cc1b1cc8
Step 5/5 : EXPOSE 80
---> Using cache
---> 984f04c8d26a
Successfully built 984f04c8d26a
Successfully tagged inamuu-test01:latest
プッシュするためにタグをつける。タグは手順に書いてある。
$ docker tag inamuu-test01:latest XXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/inamuu-test01:latest
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
XXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/inamuu-test01 latest 8fcd7e8d2cfb 36 seconds ago 109MB
inamuu-test01 latest 8fcd7e8d2cfb 36 seconds ago 109MB
イメージをプッシュ。
docker push XXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/inamuu-test01:latest
The push refers to repository [XXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/inamuu-test01]
77ed14bcd80c: Pushed
f1c347200dc3: Pushed
64ef7c2d456f: Pushed
7f2cffb520ed: Pushed
cdb3f9544e4c: Pushed
latest: digest: sha256:bb332489ee40c0dbb4deebba45ec87eaed6007f4469169a0f0af5ffcb77f203a size: 1362
イメージがプッシュされていることを確認。
これで、ECRにログインをすれば、イメージをダウンロードできるようになる。
まとめ
過去にhub.docker.comを使ったことがあるので、この辺の手順はdocker-cliを使ってできる点において、全く変わらずにできて便利だなぁと思う。
ただ、hub.docker.comはGithubのリポジトリと連携して、buildまでやってくれるので、そこはECRだけではできず、codebuildなどが必要そう。
その辺はまた検証して、ブログにアップしながら知識を深めていこうと思う。
<p style='padding: 5px;'>