ECRに自作のイメージを登録する
要件
ECRに自作のイメージを登録する
タスク
aws cliから、ecrのレポジトリーを作成する
ECRに自作のイメージを登録する
自作のイメージを登録するために簡素のwebサーバーを作ってみる
ヒントのコマンドの理解
参考記事
▼ECRのタグづけはこちらの動画を参考にしております。実務レベルでわかりやすいです!
学べること
ECRについて
Makefileについて
dockerについて
docker-compose について
Makefileで変数を使う方法
ECRのイメージにコミットのハッシュタグを付与することでimageがどのコミットでつくられたものか分かる ※これは素晴らしい
ヒント
Makefile 参考例
#-----------------------------------------
# gitに関しての情報
#-----------------------------------------
# 最新のコミットハッシュ
export COMMIT_HASH=${shell git rev-parse --short HEAD}
# 2個前のコミット (※Artifact Registryの2個前のイメージを削除するため)
export PREV-TWO-COMMIT_HASH=${shell git rev-parse --short HEAD~2}
#-----------------------------------------
# AWSに関しての設定情報
#-----------------------------------------
#AWSのAWS_ACCOUNT_ID
export AWS_ACCOUNT_ID=${shell aws sts get-caller-identity | jq -r '.Account'}
#AWSのリージョン
export AWS_REGION=ap-northeast-1
#ECRのレポジトリー名
export AWS_REPO=app-sample-repo
#AWSのコマンド設定
#-----------------------------------------
# ECR repositoryを作成
#-----------------------------------------
create-ecr-repo:
aws ecr create-repository \
--repository-name ${AWS_REPO} \
--image-scanning-configuration scanOnPush=true \
--region ap-northeast-1
#-----------------------------------------
# ECRにpushされた最新のimgを削除
#-----------------------------------------
aws-img-rm:
aws ecr batch-delete-image \
--repository-name ${AWS_REPO} \
--image-ids imageTag=latest \
--region ${AWS_REGION}
#-----------------------------------------
# ECRにImageをpush
#-----------------------------------------
aws-push:
# (1) ECRの認証
aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
# (2) コンテナのイメージを作成
docker-compose build
# (3) 上記で作成したイメージにlatestタグを追加
docker tag ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPO}:${COMMIT_HASH} ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPO}:latest
# (4) ECRにimageをpush ※タグは最新コミットハッシュのimage
docker-compose push app
# (5) ECRにimageをpush ※タグはlatestのimage
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPO}:latest
# (6) ECRの2つ前のコミットハッシュがついたimageを削除
aws ecr batch-delete-image \
--repository-name ${AWS_REPO} \
--image-ids imageTag=${PREV-TWO-COMMIT_HASH} \
--region ${AWS_REGION}
docker-compose.yaml 参考例
version: "3"
services:
app:
platform: linux/amd64
image: ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPO}:${COMMIT_HASH}
container_name: app_sample_app
build:
context: .
dockerfile: "Dockerfile"
restart: always
ports:
- "8080:8080"
docker-compose使わないでbuildしてECRにpush(参考例2)
#-----------------------------------------
# gitに関しての情報
#-----------------------------------------
# 最新のコミットハッシュ
export COMMIT_HASH=${shell git rev-parse --short HEAD}
# 2個前のコミット (※Artifact Registryの2個前のイメージを削除するため)
export PREV-TWO-COMMIT_HASH=${shell git rev-parse --short HEAD~2}
#-----------------------------------------
# AWSに関しての設定情報
#-----------------------------------------
#AWSのAWS_ACCOUNT_ID
export AWS_ACCOUNT_ID=${shell aws sts get-caller-identity | jq -r '.Account'}
#AWSのリージョン
export AWS_REGION=ap-northeast-1
#ECRのレポジトリー名
export AWS_REPO=app-sample-repo
#-----------------------------------------
# ECRにImageをpush
#-----------------------------------------
aws-push:
# (1) ECRの認証
aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
# (2) コンテナイメージを作成して、ECRにimageをpush ※タグは最新コミットハッシュ、latestタグを付与してpush
docker build . --platform amd64 -t ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPO}:latest
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPO}:latest
# (3) コンテナイメージを作成して、ECRにimageをpush ※タグは最新コミットハッシュ
docker build . --platform amd64 -t ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPO}:${COMMIT_HASH}
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${AWS_REPO}:${COMMIT_HASH}
# (4) ECRの2つ前のコミットハッシュがついたimageを削除
aws ecr batch-delete-image \
--repository-name ${AWS_REPO} \
--image-ids imageTag=${PREV-TWO-COMMIT_HASH} \
--region ${AWS_REGION}
ハマりポイント
docker-coposeのimageでimage名を設定して、そのイメージ名を参考にMalefileでガチャガチャしています
ECRにイメージをpushしたタイミングで過去の2つ前の不要なイメージを削除しているのですが、imageがない場合はエラー文言が表示されます ※気になる方がいれば修正が必要