LoginSignup
3
2

More than 5 years have passed since last update.

メモ ECR ローカルMacからAWS CLIコマンドでリポジトリ作成/イメージpush/リポジトリ削除まで

Last updated at Posted at 2019-05-03

やること

  • ローカルの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 イメージ用のディレクトリを作成してその中にDockerfileecho.shというファイルを作成する

mkdir echoalpine
cd echoalpine
touch Dockerfile
touch echo.sh
Dockerfile
FROM alpine:3.9.3

ADD ./echo.sh /tmp/echo.sh

CMD /tmp/echo.sh
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とかで使っていきたい

参考

Amazon ECRにおけるdockerの基本

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2