やること
- ローカルのMacからAWS CLIでECRにリポジトリを作成し、ビルドしたdocker imageをpush
- AWSマネジメントコンソールでpushされたイメージ確認
- AWS CLIでイメージの削除、リポジトリの削除
基本的にやってることはAmazon ECRにおけるdockerの基本と同じ
DockerHubとGoogleCloud Container Registryにしかイメージ上げたことなかったのでECRにも上げてみる
環境
- Mac
- Dockerインストール済み
- aws cli使える(configureまで済ませてある)
- AWSマネジメントコンソールにログインできる
作業
AWSマネジメントコンソールにログイン
まずはAWSコンソールにログインしてECSと検索する
左側にAmazon ECR リポジトリという項目があるので遷移
作ったリポジトリ一覧が表示されるか空の状態になってる
ローカルからAWS CLIでリポジトリを作成する
おもむろにコマンドをキメる
aws ecr create-repository --region リージョン --repository-name リポジトリ名
リージョンが東京でいいならap-northeast-1
にする
今回は10秒毎にechoを繰り返すalpineイメージをpushするのでリポジトリ名はechoalpine
とした
aws ecr create-repository --region ap-northeast-1 --repository-name echoalpine
AWSコンソールから確認してリポジトリが作成されていればOK
ECRにpushするdockerイメージのビルド (ただpullしたのでもok)
ここはわざわざビルドしなくてもdocker pull alpine
とかで取得したイメージをpushしてもいいけれどechoalpine
という名前なのでビルドする
適当にechoalpine イメージ用のディレクトリを作成してその中にDockerfile
とecho.sh
というファイルを作成する
mkdir echoalpine
cd echoalpine
touch Dockerfile
touch echo.sh
FROM alpine:3.9.3
ADD ./echo.sh /tmp/echo.sh
CMD /tmp/echo.sh
# !/bin/ash
count=0
while true
do
echo "my echoalpine container!! 1.0.0"
sleep 10
count=$(expr $count + 1)
if [ $count -ge 10 ]; then
echo "kiss of death..."
exit
fi
done
ビルドする
docker build -t echoalpine ./
動作確認(10回echoして終了、後のECS再起動確認のため)
docker run --rm -it --name echoalpine echoalpine
ECRにpushするイメージのタグ付け
先程作成したイメージもしくはpullしたイメージをECRのリポジトリにpushするためにtag付けする
形式は以下
docker tag ターゲットイメージ:タグ AWSアカウントID.dkr.ecr.ECRのリージョン.amazonaws.com/ECRリポジトリ名:ECRリポジトリに登録するタグ
echoalpineをタグ付けしたコマンドはこれ
AWSアカウントIDは適宜変更
docker tag echoalpine:latest xxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/echoalpine:1.0.0
タグ付けしたイメージをリポジトリにpush
まずはECRへのpush権限をdockerに与えるためにawsコマンドを実行
aws ecr get-login --region リージョン --no-include-email
aws ecr get-login --region ap-northeast-1 --no-include-email
> docker login -u AWS -p zzzzzzz== https://xxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com
dockerログイン用コマンドが出力されるのでそれを実行するとECRのリポジトリにpush出来るようになる
権限の有効期限は12時間らしい
先程タグ付けしたイメージをpushする
docker push xxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/echoalpine:1.0.0
AWSコンソールの作成したリポジトリを選択してイメージを確認すると1.0.0
のイメージが上がっているはず
pullも出来る
docker pull xxxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/echoalpine:1.0.0
作成したイメージとリポジトリの削除
ECRのリポジトリはAWS CLIからだと--forceオプションを付けないと削除できない
イメージを削除してからリポジトリを削除してみる(--forceで削除しないのは誤ってリポジトリを削除しないように使わないようにしている)
イメージの削除はAWS CLIから削除できる
aws ecr batch-delete-image --region リージョン --repository-name リポジトリ名 --image-ids imageTag=バージョン(タグ)
aws ecr batch-delete-image --region ap-northeast-1 --repository-name echoalpine --image-ids imageTag=1.0.0
イメージが消えたのをコンソールから確認したらリポジトリを削除する
aws ecr delete-repository --region リージョン --repository-name リポジトリ名 (--force)
aws ecr delete-repository --region ap-northeast-1 --repository-name echoalpine
リポジトリが消えたのを確認する
まとめ
aws ecr get-login
でECR用の権限を得る以外いつものdockerとあまり変わらない
ECSとかCodeBuildとかで使っていきたい