AWSのECR(Container Registry)にHello, WorldなDockerイメージを置いてみる
Amazon Elastic Container Registry(ECR)を初めて触ってみます。
(前回Google Container Registryを触ってました。)
Dockerコンテナイメージ作成
以下のような適当なDockerfile
を作成します。
FROM ubuntu:20.04 RUN echo "Hello, world!" > /hello.txt
コンテナイメージをビルドします。Dockerfile
のあるディレクトリで以下のコマンドでビルドできます。
$ docker build -t hello-world .
作成したコンテナイメージは、docker images
コマンドで見えるようになります。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest a94c81bcd9f5 10 minutes ago 72.9MB
試しにコンテナイメージを実行してみます。
$ docker run --rm hello-world cat /hello.txt Hello, world!
AWSのECR(Container Registry)にpush
まずはcreate-repository
します。
$ aws ecr create-repository --repository-name hello-world
aws ecr describe-repositories
コマンドでリポジトリに作成できているのが確認できます。
$ aws ecr describe-repositories --repository-names hello-world { "repositories": [ { "repositoryArn": "arn:aws:ecr:ap-northeast-1:xxxxxxxxxxxx:repository/hello-world", "registryId": "xxxxxxxxxxxx", "repositoryName": "hello-world", "repositoryUri": "xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world", "createdAt": 1618978639.0, "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": false }, "encryptionConfiguration": { "encryptionType": "AES256" } } ] }
aws ecr list-images
コマンドで見ると、まだイメージがないのがわかります。
$ aws ecr list-images --repository-name hello-world { "imageIds": [] }
pushするために、タグを付けます。新しいタグの名前は ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com/NAME というフォーマットです。ACCOUNT_IDは12桁の数字が入ります。
$ docker tag hello-world xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world
docker images
コマンドでタグ付けした結果を確認できます。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world latest a94c81bcd9f5 37 minutes ago 72.9MB hello-world latest a94c81bcd9f5 37 minutes ago 72.9MB
このコンテナイメージをECRにアップロードします。
$ $(aws ecr get-login --no-include-email) $ docker push xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world
aws ecr get-login --no-include-email
コマンドは docker login -u AWS -p ........
という出力をするので、それをそのまま実行すればdocker loginできるようです。
pushできたことは、aws ecr list-images
コマンドで確認できます。
$ aws ecr list-images --repository-name hello-world { "imageIds": [ { "imageDigest": "sha256:7ad2413ef0a6c81e07ab1fc21e1fa2253f78c3ecae3126f539e96cfab2d624f6", "imageTag": "latest" } ] }
AWSのECR(Container Registry)からpull
別の環境からpullにするには改めてdocker loginが必要です。
$ $(aws ecr get-login --no-include-email)
ログインできていれば、以下のコマンドで、pullして実行を確認できます。
$ docker run --rm xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world cat /hello.txt Hello, world!
バージョン情報
$ docker --version Docker version 19.03.8, build afacb8b7f0 $ aws --version aws-cli/1.18.209 Python/3.8.5 Linux/5.4.0-1036-gcp botocore/1.19.49