我的CI将图像推送到一个标记下的docker注册表。我有一个脚本定期清理旧的unuser图像。它只是迭代标记内的摘要,并在注册表API上调用DELETE(迭代注册表文件系统上的文件)。
dir="${REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY}/docker/registry/v2/repositories/test/_manifests/tags/5.3/index/sha256/"
oldManifests=$(ls -t $dir | tail -n +2 ; done)
for hash in $oldManifests
do
curl -L -X DELETE http://localhost:5000/v2/test/manifests/sha256:$hash
done
/bin/registry garbage-collect /etc/docker/registry/config.yml
垃圾收集后,所有blob都被删除,但是_manifests / tags / 5.3 / index / sha256 /下没有目录。为什么?手动删除它们是否安全?
答案 0 :(得分:0)
是的,手动删除它们是安全的。
在你的情况下,标签是版本化的,使用ls -t
并没有什么坏处。对于“最新”代码,最好检查.../_manifests/tags/5.3/current/link
的内容(已剥离sha256:
前缀)并继续,因为您可以将旧版清单推送为新的“最新”降级先前推送的图像。
我有一个脚本从注册表中清除未标记的(您的案例)或标记的图像: https://github.com/ricardobranco777/clean_registry.sh
我不使用API,因为它缺乏删除标签的支持。