docker registry 空间清理手册

Docker registry是docker私有镜像仓库。长期运行会存在一些遗留的镜像,清理时可以从两个方面去清理:

  1. 镜像标签为none的镜像,是被覆盖的镜像,不会再被拉取到;
  2. 清理多次重复构建,镜像层数较高的冗余镜像。

本次操作使用的是registry:2的镜像搭建的私有仓库,并没有做特殊的改动。其它版本可能需要修改storage配置中增加delete=true配置项,详细参考下方参考链接。

1. 清理指定none镜像

下载清理脚本

curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/delete_docker_registry_image.py | sudo tee /usr/local/bin/delete_docker_registry_image >/dev/null
sudo chmod a+x /usr/local/bin/delete_docker_registry_image

【可选】安装python,如服务器已安装,直接跳过这一步

yum install -y python3

映射出镜像仓库在宿主机的挂载地址

  • 我部署的时候,是使用挂载项 registry_data:/var/lib/registry
  • 那么我需要找到宿主机的registry_data的实际地址
  • 使用docker volume ls 找到registry_data
  • 找到实际地址docker inspect ${volume_id},可以看到是/var/lib/docker/volumes/lcdp-swarm-deploy_registry-data/_data
  • 综上,我得到映射地址,执行下面命令声明环境变量
export REGISTRY_DATA_DIR=/var/lib/docker/volumes/lcdp-swarm-deploy_registry-data/_data/docker/registry/v2

清理指定的none镜像,如果不知道要清理哪些镜像,可以看第二种方法的内容,找出哪个镜像占用比较大

python3 delete_docker_registry_image -i ${image_name} -u

执行垃圾回收,清理二进制数据

docker exec -t ${container_name} registry garbage-collect /etc/docker/registry/config.yml

2. 暴力清理指定镜像

# 进入容器
docker exec -it ${container_name} sh

# 进入容器后的操作
# 查看镜像总占用空间
du -sch /var/lib/registry
# 分析镜像层数较多的镜像,仅显示占用前10的镜像名称
registry garbage-collect --dry-run /etc/docker/registry/config.yml  awk -F : '{print $1}' | sort | uniq -c | sort -rn -k1 | head -10 | grep -v "redis|jdk|php|mysql|nginx|apache|zk|elastic"
# 从上方的输出,酌情考虑哪些镜像需要删除
cd /var/lib/registry/docker/registry/v2/repositories
ls
# 酌情使用rm 删除想要删除的镜像文件夹
# 使用垃圾回收,清理二进制空间
registry garbage-collect /etc/docker/registry/config.yml

# 再次查看占用空间,看清理是否有效果
du -sch /var/lib/registry

参考链接

原文地址:https://www.cnblogs.com/xiaojiluben/p/15497837.html