Closed9

gcr-cleaner で Google Container Registry の不要なコンテナイメージを削除する

nomadblackynomadblacky

インストール

オフィシャルのコンテナイメージを使うのが一番早いと思われる

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
nomadblackynomadblacky

リポジトリの指定と 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 などのオプションを追加しなかった場合のデフォルト設定では、タグが付与されていないイメージが削除されるようだ。

img1

nomadblackynomadblacky

リポジトリ階層を再帰的に削除する

-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
nomadblackynomadblacky

指定したタグが含まれるイメージを削除する

-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
nomadblackynomadblacky

指定期間より新しいイメージを保持する

-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
nomadblackynomadblacky

最新 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
nomadblackynomadblacky

イメージを削除する

-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

img

このスクラップは2024/04/01にクローズされました