Closed9
gcr-cleaner で Google Container Registry の不要なコンテナイメージを削除する
GCP の Container Registry に push している不要なイメージを一括で削除したいため、gcr-cleaner が使えるかどうか検証する。
インストール
オフィシャルのコンテナイメージを使うのが一番早いと思われる
docker run -v "${HOME}/.config/gcloud:/.config/gcloud" -it us-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli
-v
オプションで GCP の認証情報を gcr-cleaner が読み込めるようにしている
--help
でオプションの詳細を確認できる
$ docker run -it us-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli --help
Usage of /bin/gcr-cleaner-cli:
Deletes untagged or stale images from a Docker registry.
Options:
-concurrency
Concurrent requests (defaults to number of CPUs)
-dry-run
Do a noop on delete api call
-grace
Grace period
-keep
Minimum to keep
-recursive
Clean all sub-repositories under the -repo root
-repo
Repository name
-tag-filter-all
Delete images where all tags match this regular expression
-tag-filter-any
Delete images where any tag matches this regular expression
-token
Authentication token
-version
Print version information and exit
リポジトリの指定と dry-run
-repo
オプションで削除したいリポジトリ名を指定する。
また、-dry-run
オプションを有効にすると、実際の削除は行われない。
$ docker run -v "$HOME/.config/gcloud:/.config/gcloud" -it --rm us-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli \
-repo gcr.io/my-project/gcr-cleaner-test/aaa -dry-run
WARNING: Running in dry-run mode - nothing will actually be cleaned!
Deleting refs older than 2024-04-01T07:46:12Z on 1 repo(s)...
gcr.io/my-project/gcr-cleaner-test/aaa
✓ sha256:3637ef9cc2e050083d35f59bd21fea31f1d7a5cd54891b2381b6d2dc85849e1b
-grace
, -keep
などのオプションを追加しなかった場合のデフォルト設定では、タグが付与されていないイメージが削除されるようだ。
リポジトリ階層を再帰的に削除する
-recursive
オプションを指定するとリポジトリ内のフォルダに含まれるイメージを再帰的に検索する。
$ docker run -v "$HOME/.config/gcloud:/.config/gcloud" -it --rm us-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli \
-repo gcr.io/my-project/gcr-cleaner-test -dry-run -recursive
WARNING: Running in dry-run mode - nothing will actually be cleaned!
Deleting refs older than 2024-04-01T07:54:14Z on 2 repo(s)...
gcr.io/my-project/gcr-cleaner-test/aaa
✓ sha256:3637ef9cc2e050083d35f59bd21fea31f1d7a5cd54891b2381b6d2dc85849e1b
gcr.io/my-project/gcr-cleaner-test/bbb
✓ sha256:58b6bcd5b0344d815bd6f1851a2c902b4e8e41a7fb78540153ee4e42c28d10c5
指定したタグが含まれるイメージを削除する
-tag-filter-any
オプションで指定されたタグを含むイメージを削除できる。
$ docker run -v "$HOME/.config/gcloud:/.config/gcloud" -it --rm us-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli \
-repo gcr.io/my-project/gcr-cleaner-test/aaa -dry-run -tag-filter-any "v0\.0\.1"
WARNING: Running in dry-run mode - nothing will actually be cleaned!
Deleting refs older than 2024-04-01T08:04:01Z on 1 repo(s)...
gcr.io/my-project/gcr-cleaner-test/aaa
✓ sha256:3637ef9cc2e050083d35f59bd21fea31f1d7a5cd54891b2381b6d2dc85849e1b
✓ sha256:f4d56c821662db654141c40488e1075425f85bfc8583a8678cee50bb2704f930
✓ v0.0.1
タグの状態に関わらずすべてのイメージを削除したい場合は .*
を指定する。
$ docker run -v "$HOME/.config/gcloud:/.config/gcloud" -it --rm us-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli \
-repo gcr.io/my-project/gcr-cleaner-test/aaa -dry-run -tag-filter-any ".*"
WARNING: Running in dry-run mode - nothing will actually be cleaned!
Deleting refs older than 2024-04-01T08:08:59Z on 1 repo(s)...
gcr.io/my-project/gcr-cleaner-test/aaa
✓ latest
✓ sha256:3637ef9cc2e050083d35f59bd21fea31f1d7a5cd54891b2381b6d2dc85849e1b
✓ sha256:395a4b4bfc3086654c105f0938e9317f9fbd6603cc4996d360e6cc8979cd435e
✓ sha256:f4d56c821662db654141c40488e1075425f85bfc8583a8678cee50bb2704f930
✓ v0.0.1
指定期間より新しいイメージを保持する
-grace
オプションでコマンドの実行日時から指定した期間のイメージを保持する。
$ docker run -v "$HOME/.config/gcloud:/.config/gcloud" -it --rm us-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli \
-repo gcr.io/my-project/gcr-cleaner-test/aaa -dry-run -tag-filter-any ".*" -grace 24h
WARNING: Running in dry-run mode - nothing will actually be cleaned!
Deleting refs older than 2024-03-31T09:11:00Z on 1 repo(s)...
gcr.io/my-project/gcr-cleaner-test/aaa
✗ no refs were deleted
最新 n 個のイメージを保持する
-keep
オプションでアップロードした新しい順に指定した個数のイメージを保持する。
$ docker run -v "$HOME/.config/gcloud:/.config/gcloud" -it --rm us-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli \
-repo gcr.io/my-project/gcr-cleaner-test/aaa -dry-run -tag-filter-any ".*" -keep 2
WARNING: Running in dry-run mode - nothing will actually be cleaned!
Deleting refs older than 2024-04-01T09:14:30Z on 1 repo(s)...
gcr.io/my-project/gcr-cleaner-test/aaa
✓ sha256:3637ef9cc2e050083d35f59bd21fea31f1d7a5cd54891b2381b6d2dc85849e1b
イメージを削除する
-dry-run
オプションを指定しなければ実際にイメージの削除が実行される。
$ docker run -v "$HOME/.config/gcloud:/.config/gcloud" -it --rm us-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli \
-repo gcr.io/my-project/gcr-cleaner-test -recursive -tag-filter-any ".*"
Deleting refs older than 2024-04-01T09:20:03Z on 2 repo(s)...
gcr.io/my-project/gcr-cleaner-test/aaa
✓ latest
✓ sha256:3637ef9cc2e050083d35f59bd21fea31f1d7a5cd54891b2381b6d2dc85849e1b
✓ sha256:395a4b4bfc3086654c105f0938e9317f9fbd6603cc4996d360e6cc8979cd435e
✓ sha256:f4d56c821662db654141c40488e1075425f85bfc8583a8678cee50bb2704f930
✓ v0.0.1
gcr.io/my-project/gcr-cleaner-test/bbb
✓ latest
✓ sha256:58b6bcd5b0344d815bd6f1851a2c902b4e8e41a7fb78540153ee4e42c28d10c5
✓ sha256:642e11ca8339a05d2e6a8ffbb8b99c77f99c4e83583444aa97495ec90576c1d7
おまけ
Container Registry を刷新した新しいサービスの Artifact Registry でも同様に gcr-cleaner が利用できる。
また、Artifact Registry 自身の機能にクリーンアップポリシーがあり、定期的に不要なイメージを削除したい場合はこちらを利用するのが良いと思う。
このスクラップは2024/04/01にクローズされました