docker/distributionで使われていないレイヤーやタグがついていないマニフェストをGCする

docker/distoributionを長く使っていると、どのイメージからも参照されていないレイヤーが出てきたり、タグがついていなくてほぼ使われないイメージが増えたりする。バックエンドにクラウドストレージを使っている場合は不要なデータを消せると嬉しいのだが、どうやって消せばいいのか?という疑問がある。

docker/distributionには garbage-collect コマンドがあり、これを使うことで不要なデータをGCすることができる。

`garbage-collect` deletes layers not referenced by any manifests

Usage:
  registry garbage-collect <config> [flags]
Flags:
  -m, --delete-untagged=false: delete manifests that are not currently referenced via tag
  -d, --dry-run=false: do everything except remove the blobs
  -h, --help=false: help for garbage-collect


Additional help topics:

デフォルトではマニフェストから参照されていないレイヤーを削除する。また、フラグを指定することでタグがついていないマニフェストも消すことができる。