Amazon ECR を使ってみたのでここにメモします。
Amazon ECR とは
Elastic Container Registry の略で、Dockerのコンテナイメージを保存しておくためのレジストリです。
Docker コンテナイメージを保存・管理・デプロイを行うことができます。
特徴
- AWS ECSと統合
- 高可用性
- AWS Marketplaceが活用できる
- セキュアな状態
- ワークフローがシンプル
- Dockerのサポートが利用可能
Docker イメージを ECR にプッシュする流れ
事前準備
- リポジトリを作成
- プッシュコマンドの確認(イメージタグ, URI, リポジトリ)
ECR のコンソールからリポジトリを作成します。
リポジトリとは、Docker イメージを保存する場所となるものです。これがないとイメージを保存できないので先に作っておきます。
処理の流れ
".env" に環境変数を設定
レジストリの認証
Docker クライアントはリポジトリを管理しているECRのレジストリから認証を得る必要があります。
(認証トークンは12時間有効)
$ aws ecr get-login-password --region ${AWS_ECR_REGION_NAME} | \ docker login --username AWS --password-stdin ${AWS_ECR_IMAGE_URI} Login Succeeded
[ Login Succeeded ] と表示されれば認証成功です。
イメージの作成
イメージを作成します。
$ docker build -t ${AWS_ECR_REPOSITORY_NAME} .
イメージにタグ付け
コマンドの引数の内容は docker tag {{元のリポジトリ名}}:{{元のタグ名}} {{変更後のリポジトリ名}}:{{変更後のタグ名}}となります。
$ docker tag ${AWS_ECR_REPOSITORY_NAME}:latest ${AWS_ECR_IMAGE_URI_LATEST}
イメージプッシュ
イメージをプッシュします。
$ docker push ${AWS_ECR_IMAGE_URI_LATEST}
make ファイル作成
何度も実行するのが大変なので、ECRへのイメージのプッシュ用に make ファイルを作成してみました。
(.env に環境変数を設定)
MAKE=make --no-print-directory SHELL=/bin/bash .SHELLFLAGS = -o pipefail -c include .env export $(shell cat .env | tr -d '"' | sed 's/=.*//') UID := $(shell id -u) GID := $(shell id -g) # 内部変数 DOCKER_RUN=docker run --rm -u "${UID}" -v `pwd`:/mnt -e "TZ=Asia/Tokyo" -w /mnt --env-file .env "${AWS_ECR_REPOSITORY_NAME}" .PHONY: run run: build .local_env @${DOCKER_RUN} python src/sample.py .PHONY: clear clear: @docker system prune -a .PHONY: login login: aws ecr get-login-password --region ${AWS_ECR_REGION_NAME} | \ docker login --username AWS --password-stdin ${AWS_ECR_IMAGE_URI} .PHONY: build build: .env @docker build -t ${AWS_ECR_REPOSITORY_NAME} . .PHONY: tag tag: @docker tag ${AWS_ECR_REPOSITORY_NAME}:latest ${AWS_ECR_IMAGE_URI_LATEST} .PHONY: push push: .env @make clear @make build @make tag @docker push ${AWS_ECR_IMAGE_URI_LATEST}
実行
$ make login $ make push