はじめに
Amazon ECR(Elastic Container Registry)のDockerイメージを取得するには事前にECRレジストリに対してDockerクライアントを認証させる必要があります。
本記事はDockerクライアントのレジストリ認証の手順についてまとめたものとなります。
Amazon ECR では、ユーザーがレジストリに対して認証したり、AWS ECRレポジトリとの間でイメージをプッシュまたはプルしたりできるためには、事前に IAM ポリシーを通じて
ecr:GetAuthorizationToken API
へのアクセス権限を許可されている必要があります。
イメージのプル - Amazon ECR
使用環境とバージョン
- macOS Catalina
- aws-cli/2.0.28
- Docker version 19.03.13
記事の対象
- ある程度AWSとDockerの知識がある方
- ECSもしくはEKSを利用してアプリケーションを作成している方
事前準備
- AWS CLIを利用できること
- IAMユーザもしくはスイッチロール先に
ecr:GetAuthorizationToken
権限が付与されていること ※1
※1 最低限の権限で良ければAmazonEC2ContainerRegistryReadOnly
ポリシーをアタッチしておけば大丈夫です。
Amazon ECR 管理ポリシー - Amazon ECR
手順
AWS CLIでECRのログインパスワードを取得し、取得したログインパスワード使ってdocker login
コマンドでログインします。
$ aws ecr get-login-password --region ap-northeast-1 \
| docker login --username AWS --password-stdin {aws_account_id}.dkr.ecr.{region}.amazonaws.com
ログイン後は通常のdocker pull
でローカルにDockerイメージを取得できます。
$ docker pull {aws_account_id}.dkr.ecr.{region}.amazonaws.com/demo-api:latest
docker pull
の対象URIはECRコンソールから確認できます。
[補足] Dockerイメージを Amazon ECR リポジトリにpushするには
Dockerイメージをpushする場合にもpullと同様に事前にECRレジストリに対してDockerクライアントを認証させる必要があります。
事前に本記事の手順に従って事前に認証を行ってください。
Amazon ECRリポジトリの作成
puah先となるECRリポジトリを事前に作成する必要があります。
AWSコンソールもしくは以下のAWC CLIにてECRリポジトリを作成します。
$ aws ecr create-repository
--repository-name {aws_account_id}.dkr.ecr.{region}.amazonaws.com/demo-api
create-repository — AWS CLI 1.18.197 Command Reference
dockerイメージ準備
pushしたいdockerイメージを確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
demo-api latest 9ec9f9c8cabf 5 months ago 402MB
...
次にdockerイメージをECRにpushするためにタグ付けします。
$ docker tag 9ec9f9c8cabf {aws_account_id}.dkr.ecr.{region}.amazonaws.com/demo-api
REPOSITORY TAG IMAGE ID CREATED SIZE
demo-api latest 9ec9f9c8cabf 5 months ago 402MB
+ {aws_account_id}.dkr.ecr.{region}.amazonaws.com/demo-api latest 5acde687200b 5 months ago 402MB
...
これで準備が整ったのでdocker push コマンドを使用してイメージをpushできます。
docker push {aws_account_id}.dkr.ecr.{region}.amazonaws.com/demo-api