Cleanup docker registry
Проверено для версии 2.6.2
1. добавить в конфиг registry эти строки и перезапустить:
2. получаем список тегов для репозитория и выбираем список на удаление
3. помечаем объекты на удаление через api
4. заходим внутрь контейнера и запускаем garbage-collector.
Итого наша задача - получить список тегов, выбрать нужные на удаление. На каждый тег получить sha256 манифеста (docker-content-digest в заголовке ответа), а затем пометить этот заголовок на удаление. К концу 3-го пункта никакие данные еще не удалены. Удаление происходит не вручную, а с помощью нативного сборщика мусора. согласно помеченным манифестам будут удалены выбранные теги.
#docker #registry
Проверено для версии 2.6.2
1. добавить в конфиг registry эти строки и перезапустить:
storage:
delete:
enabled: true
2. получаем список тегов для репозитория и выбираем список на удаление
curl -u <user>:<password> https://<registry_host>/v2/<repo_name>/tags/list
3. помечаем объекты на удаление через api
repo="REPO_PATH"
tag_list='TAG LIST separated by space'
user="USER"
pwd="PASSWORD"
registry_host="<registry_host>"
header="Accept: application/vnd.docker.distribution.manifest.v2+json"
for tag in ${tag_list}; do
digest=$(curl -I -u $user:$pwd -H "$header" "https://${registry_host}/v2/${repo}/manifests/${tag}" 2>/dev/null| awk '$1 == "docker-content-digest:" {print $2}'| tr -dc '[[:print:]]')
curl -XDELETE -u $user:$pwd -H "$header" "https://${registry_host}/v2/${repo}/manifests/${digest}"
done
4. заходим внутрь контейнера и запускаем garbage-collector.
registry garbage-collect /etc/docker/registry/config.yml
Итого наша задача - получить список тегов, выбрать нужные на удаление. На каждый тег получить sha256 манифеста (docker-content-digest в заголовке ответа), а затем пометить этот заголовок на удаление. К концу 3-го пункта никакие данные еще не удалены. Удаление происходит не вручную, а с помощью нативного сборщика мусора. согласно помеченным манифестам будут удалены выбранные теги.
#docker #registry