Table of Contents
尝试了几种方式, 算是找到了一个比较方便的清理docker registry的方式
前言
两年前分给了 docker registry 1T的磁盘,虽然有预感磁盘空间会被用完, 没想过能够坚持这么久。 而且期间一直想把 registry 迁移到 harbor,也能对不同账户的权限进行分配和限制,但几百G的磁盘占用也不好迁移,所以一直被耽搁(迁移方式都准备好了 https://blog.k8s.li/docker-registry-to-harbor.html)
清理
列出所有镜像
registry garbage-collect --dry-run /etc/docker/registry/config.yml >> res.txt
找出分层(push次数)最多的几个镜像
cat res.txt | awk -F : '{print $1}' | sort | uniq -c | sort -rn -k1 | head -10 25871 image1 25649 image2 16815 image3 ...
删除某个镜像的untagged的数据
注意 -u
参数, 仅删除 untagger 的数据
-
dry-run
REGISTRY_DATA_DIR=/var/lib/registry/docker/registry/v2 python delete_docker_registry_image.py --image image1 -u --dry-run
-
实际删除(需要先暂停registry)
REGISTRY_DATA_DIR=/var/lib/registry/docker/registry/v2 python delete_docker_registry_image.py --image image1 -u
-
查看磁盘占用(恢复registry)
发现磁盘占用的大头还是这些 untagged 的数据, 仅仅处理了几个分层数量最多的镜像,一下子多了几百G的空间