AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

同一の IMAGE ID を持つ docker イメージの削除 (タグを消す)

以下の状態でローカルに存在する IMAGE ID 000000000000 を、

REPOSITORY TAG IMAGE ID CREATED SIZE
example1 0.0.1 000000000000 1weeks ago 100MB

ECR (例として example1.dkr.ecr.ap-northeast-1.amazonaws.com/integration) へタグ latest を付与して push しようとするとこうなるはず。

aws ecr get-login-password --region ap-northeast-1 --profile ${プロファイル名} | docker login --username AWS --password-stdin example1.dkr.ecr.ap-northeast-1.amazonaws.com
docker tag 000000000000 example1.dkr.ecr.ap-northeast-1.amazonaws.com/integration:latest
docker push example1.dkr.ecr.ap-northeast-1.amazonaws.com/integration:latest

こうすると、手元の docker image ls はこうなる。

REPOSITORY TAG IMAGE ID CREATED SIZE
example1 0.0.1 000000000000 1weeks ago 100MB
example1.dkr.ecr.ap-northeast-1.amazonaws.com/integration latest 000000000000 1weeks ago 100MB

これはこれで、新しいタグが生えただけで同一のコンテナを指しているので「容量が 100MB 増えた」とかではないので気にしなくて良い。 んだけど、長いことやってると docker image ls したときに「ウワァァ!」となりがちなので、参照しなくなったやつは消しておきたい。

上記で作成した example1.dkr.ecr.ap-northeast-1.amazonaws.com/integration を削除するのはこう。

docker rmi example1.dkr.ecr.ap-northeast-1.amazonaws.com/integration:latest
Untagged: example1.dkr.ecr.ap-northeast-1.amazonaws.com/integration:latest
Untagged: example1.dkr.ecr.ap-northeast-1.amazonaws.com/integration:@sha256:なんか長いハッシュ

増えていた latest タグだけを削除できた。

REPOSITORY TAG IMAGE ID CREATED SIZE
example1 0.0.1 000000000000 1weeks ago 100MB

latest 消すことある〜? みたいな気持ちになるかもしれないけど、これ hotfix リリースしたくて、 x.y.z-hotfix などとかのタグ付けたりしてると、リストがもりもり増えていくので、わからなくなる前にメンテしていきたい。

そういう運用をするな、という話はある。

ECR の認証について

ちなみに上記にサッと書いてしまったけど、 例として利用している ECR はリモートへ push などする場合、事前に docker なり操作するクライアント側へログイン認証を入れてやる必要がある。

これ。

aws ecr get-login-password --region ap-northeast-1 --profile ${プロファイル名} | docker login --username AWS --password-stdin example1.dkr.ecr.ap-northeast-1.amazonaws.com

ちなみにこちら、認証してから 12 時間で期限が切れるらしいので、寝起きに作業して「うーん?」となりがち。 気をつけたい。