GC Docker-registry: автоудаление старых тегов
Почему registry разрастается, как настроить registry.host и registry.keep_versions, что именно удаляет фоновая задача.
Каждый успешный CI билд продукта добавляет в наш registry свежий тег. За полгода набегает 200+ слоёв общей массой 30+ GB. Без GC диск под registry заканчивается — деплои новых тенантов падают на image-pull.
Что делает GC
Фоновая задача в worker (api/internal/registry/gc.go) раз в час идёт по списку продуктов, для каждого спрашивает у registry GET /v2/<repo>/tags/list, оставляет N последних (по published_at в product_versions) + текущую is_current версию, остальные удаляет через DELETE /v2/<repo>/manifests/<digest>.
N задаётся в /admin/settings → registry.keep_versions (по умолчанию 5).
Когда GC не запустится
Если registry.host пустой — GC спокойно ничего не делает (полезно для dev). Если registry требует auth — указать registry.username и registry.password (Basic-auth).
Сами слои (blobs) после удаления manifest'ов не освобождаются сразу — внутренний GC registry'я запускается отдельно (registry garbage-collect /etc/docker/registry/config.yml), это лучше повесить cron'ом на хост, где живёт registry.
Хотите развернуть свой тенант на wl-installer?
Аренда: 5 минут от заказа до боевого URL. Покупка с исходниками: 1–5 рабочих дней.