GCPのGoogle Container Registryのイメージを一括削除する方法
はじめに
GCP上の Google Container Registry 内に不要なDockerイメージがあるため、削除したいと思いました。
Dockerイメージを削除するためには、すべてのタグ(というかハッシュ。ビルド履歴)を削除する必要がありmさう。
対象のDockerイメージに4000以上のタグが付与されているため、できる限り一括かつ並列で削除擦る方法を探してみました。
検証環境
$ uname -moi
x86_64 MacBookPro16,1 Darwin
$ bash -version | head -n 1
GNU bash, バージョン 5.0.17(1)-release (x86_64-apple-darwin19.4.0)
$ xargs --version | head -n 1
xargs (GNU findutils) 4.7.0
準備
GCP上のリソースをコマンドラインから操作するためのツールとして gcloud
コマンドがあります。
事前にこちらのコマンドをインストールし、 gcloud auth login
などで認証を完了しておきましょう。
正しく準備ができていれば、以下のコマンドが動作するはずです。
# Google Container Registryからイメージの一覧を取得
$ gcloud container images list
結果
準備ができれば、後は以下のコマンドを実行するだけです。
以下の2つの環境変数はご自分のGCP設定に合わせて書き換えてください。
GCP_PROJECT_ID
GCP_DOCKER_IMAGE_NAME
$ GCP_PROJECT_ID=YOUR_GCP_PROJECT_ID
$ GCP_DOCKER_IMAGE_NAME=gcr.io/${GCP_PROJECT_ID}/YOUR_DOCKER_IMAGE_NAME
$ gcloud \
container images list-tags ${GCP_DOCKER_IMAGE_NAME} \
| sed 1d \
| awk '{ print $1 }' \
| xargs -P4 -n 1 -I{} gcloud container images delete ${GCP_DOCKER_IMAGE_NAME}@sha256:{} --quiet --force-delete-tags
ここでは、 xargs
の -P
パラメータで 4並列実行しています 。
マシンリソースに自身があるなら -P0
として、CPUを目一杯使うことができます。
ひとこと
きっと、もっとスマートに削除する方法があると思います。
ディスカッション
コメント一覧
まだ、コメントがありません