Chapter 09

ECR:Dockerイメージ プッシュ

kazuhito
kazuhito
2021.12.22に更新

概要

このチャプターでは「PC:Dockerfile作成、ビルド確認」で作成したDockerイメージを、
ECRにプッシュします。

ディレクトリ構成

このチャプターで必要なファイル構成は以下です。
前チャプターまでと比較して「build_and_push.sh」を追加しています。

├── scripts
│   ├── road_segmentation.py
│   └── train
├── model
│   └── road_segmentation.onnx
├── build_and_push.sh
├── Dockerfile
├── requirements.txt
├── sample.mp4
└── local_test
    ├── train_local.sh
    └── test_dir
        ├── input
        │   └── data
        │       └── movie
        │           └── sample.mp4
        └── config
            └── hyperparameters.json

このチャプターで使用するソースコード一式は以下リポジトリでも公開しています。

https://github.com/Kazuhito00/Zenn-Book-S3-SageMaker-S3-Sample/tree/main/Chapter-09

build_and_push.sh

その名の通りDockerをビルドしてプッシュするスクリプトです。
スクリプト内容は以下のサンプル内容ほぼそのままです。

https://github.com/aws/amazon-sagemaker-examples/blob/master/advanced_functionality/scikit_bring_your_own/container/build_and_push.sh
build_and_push.sh
#!/usr/bin/env bash

# イメージ名指定
image=$1

if [ "$image" == "" ]
then
    echo "Usage: $0 <image-name>"
    exit 1
fi

# IAM認証情報に紐付くアカウント番号を取得
echo Get the account number associated with the current IAM credentials
account=$(aws sts get-caller-identity --query Account --output text)
if [ $? -ne 0 ]
then
    exit 255
fi

# 現在のリージョン情報を取得(指定がない場合「us-west-2」に設定)
echo Get the region defined ~~
region=$(aws configure get region)
region=${region:-us-west-2}

# ECRへプッシュする名称を生成
fullname="${account}.dkr.ecr.${region}.amazonaws.com/${image}:latest"

# リポジトリがECRに存在しない場合、新規作成
echo If the repository doesnt exist in ECR, create it
aws ecr describe-repositories --repository-names "${image}" > /dev/null 2>&1
if [ $? -ne 0 ]
then
    aws ecr create-repository --repository-name "${image}" > /dev/null
fi

# ECRからログインコマンドを取得し、Dockerログインを実行
echo Get the login command from ECR and execute it directly
aws ecr get-login-password --region "${region}" | docker login --username AWS --password-stdin "${account}".dkr.ecr."${region}".amazonaws.com

# Dockerビルド・プッシュ
echo docker build  -t ${image} .
docker build  -t ${image} .
echo docker tag ${image} ${fullname}
docker tag ${image} ${fullname}

docker push ${fullname}

以下のようにイメージ名を指定して実行します。
※事前に「PC:AWS CLIインストール」チャプターの aws configure を実施している必要があります。

./build_and_push.sh zenn_sample

ECR

「build_and_push.sh」の実行が成功すれば、以下のようにECRにイメージが追加されます。