wl·solution
Гайды · Инфраструктура
4 мин чтенияобновлено 2026-06-30

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 рабочих дней.