はじめに
gitlabでソース管理を行い、CIにて[gitlab container registry] (https://docs.gitlab.com/ee/user/project/container_registry.html) にdocker imageを登録しています。
ディスク消費量が増え続けてきたのでゴミ掃除したお話です。
結論
- gitlab-ctl registry-garbage-collectじゃ上手く消えない場合がある。
- docker-distribution-pruner使ったらちゃんと消えました。
経緯
1年経過したころの話です。gitlab serverのディスク消費量、何かすごい増えているなーと気づいきました。
そして、
/var/opt/gitlab/gitlab-rails/shared/registry
のディスク消費量を確認すると・・・。
$ sudo du -s -h *
37G artifacts
513M cache
0 lfs-objects
32K pages
89G registry
0 tmp
$
となっており、untaggedなイメージの履歴が延々と残り続けているのでゴミ掃除を行う事にしました。
registry-garbage-collectの実行
gitlab公式ドキュメントにそって、下記コマンドで実行してみます。
$ sudo gitlab-ctl registry-garbage-collect
5分くらいで終わりました!早い!でも・・・
$ sudo gitlab-ctl registry-garbage-collect
....
5726 blobs marked, 0 blobs eligible for deletion
ok: run: registry: (pid 32084) 0s
$
0 blobs eligible for deletion
ん?消えていない・・・!なんでだろーと思い、色々探していると・・・下記情報が見つかりました。
なるほど。消えない場合があるみたいですね。で、
https://gitlab.com/gitlab-org/docker-distribution-pruner
使えばうまい事消えるみたいですね。やってみましょう。
docker-distribution-prunerの実行
事前準備
下記のように実行できるようにしました。
$ yum install go
$ go get -u gitlab.com/gitlab-org/docker-distribution-pruner
$ chmod 755 go/bin/docker-distribution-pruner
実行
実行してみます。
$ cd ./go/bin
$ sudo ./docker-distribution-pruner -config=/var/opt/gitlab/registry/config.yml -delete-old-tag-versions=false --delete
...
INFO[0000] BLOBS INFO: Objects/Unused: 258 / 4114 Data/Unused: 6.0 GB / 83 B
WARN[0000] DELETEABLE INFO: 5540 links, 4114 blobs, 0 other, 83 B
$
お、よさそうですね!削除結果は、バックアップフォルダに入っているので、一通り消えちゃいけないものが消えていないか確認して、バックアップフォルダも削除します。
$ cd /var/opt/gitlab/gitlab-rails/shared/registry
$ rm -rf docker_backup
補足
-
--delete
を付けずに実行すれば何が削除されるか事前に確認することができます。 - 実行した結果は、
repositories.csv
に出力されています。imageの一覧等に確認する時に便利かも。。。