見出し画像

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がない場合はエラー文言が表示されます ※気になる方がいれば修正が必要


関連タグ

#ECR #docker #aws #Makefile #docker -compose

この記事が気に入ったらサポートをしてみませんか?