🏷️
ECR のタグを付け替えるハンズオン
この記事について
ECR イメージのタグを付け替える方法の記事を読んだが、ちゃんと理解できた実感がなかったのでハンズオン記事を作成して理解を深めようと試みた。
ハンズオンでは、ECR リポジトリ作成・イメージのプッシュ・タグの付け替え・リソースの削除まで行う。
AWS CLI の権限さえ満たしていれば再現性のある手順になるよう考慮したので、気軽に試していただきたい。
ECR リポジトリを作成
aws ecr create-repository \
--repository-name sample-greet \
--image-tag-mutability MUTABLE
※ latest タグを上書きするので --image-tag-mutability MUTABLE
にしている
イメージをプッシュ
プッシュするイメージを構成する Dockerfile を作成する
cat << EOF > Dockerfile
FROM alpine:latest
ENTRYPOINT [ "echo", "Hello," ]
EOF
イメージをプッシュする
以下のスクリプトで、sample-greet リポジトリに「v1.0.0」と「latest」タグのイメージがプッシュされる。
region=$(aws configure get region)
acount_id=$(aws sts get-caller-identity --query Account --output text)
ecr_host="$acount_id.dkr.ecr.$region.amazonaws.com"
image_uri="$ecr_host/sample-greet"
# 認証情報を取得
aws ecr get-login-password --region $region | docker login --username AWS --password-stdin $ecr_host
# イメージ v1.0.0 をビルド&プッシュ
docker build . -t sample-greet
docker tag sample-greet "${image_uri}:v1.0.0"
docker push "${image_uri}:v1.0.0"
# Dockerfile を修正して latest 扱いにする
cat << EOF > Dockerfile
FROM alpine:latest
ENTRYPOINT [ "echo", "こんにちは、" ]
EOF
# イメージ latest をビルド&プッシュ
docker build . -t sample-greet
docker tag sample-greet "${image_uri}:latest"
docker push "${image_uri}:latest"
以下のコマンドで、sample-greet リポジトリにプッシュしたイメージを確認できる。
aws ecr list-images \
--repository-name sample-greet
イメージ v1.0.0 に latest タグを付ける
# 「v1.0.0」の imageManifest を取得
MANIFEST=$(
aws ecr batch-get-image \
--repository-name sample-greet \
--image-ids imageTag=v1.0.0 \
--output json \
| jq --raw-output --join-output '.images[0].imageManifest' \
)
# 「v1.0.0」に latest タグを付与する
aws ecr put-image \
--repository-name sample-greet \
--image-tag latest \
--image-manifest "$MANIFEST"
以下のコマンドで、「v1.0.0」と「latest」の imageDigest が同一になったことが確認できる。
aws ecr list-images \
--repository-name sample-greet
後片付け
# リポジトリ削除( `--force` オプションによってイメージもまとめて削除)
aws ecr delete-repository \
--repository-name sample-greet \
--force
# ファイル削除
rm Dockerfile
以上。
Discussion