clean_old_versions.py使用指南:自动化清理Docker镜像历史版本
2026/7/21 19:57:18 网站建设 项目流程

clean_old_versions.py使用指南:自动化清理Docker镜像历史版本

【免费下载链接】delete-docker-registry-imageIf you are running a private v2 docker registry, and you are storing your data on disk, running this script from the machine where the data lives will let you fully delete an image or tag项目地址: https://gitcode.com/gh_mirrors/de/delete-docker-registry-image

Docker私有仓库的存储空间管理一直是运维人员的痛点。随着持续集成和持续部署的广泛应用,Docker镜像版本会快速积累,占用大量磁盘空间。clean_old_versions.py脚本为您提供了一种智能、自动化的解决方案,帮助您轻松清理Docker Registry中的旧版本镜像,释放宝贵的存储空间。

为什么需要自动化清理Docker镜像?

在Docker私有仓库中,每次构建都会产生新的镜像标签。如果不定期清理,仓库会迅速膨胀:

  • 开发环境:每天多次构建产生数十个版本
  • 生产环境:保留过多历史版本浪费存储资源
  • 安全考虑:旧版本可能存在已知漏洞需要清理

clean_old_versions.py脚本正是为解决这些问题而设计的自动化工具,它通过智能筛选和批量删除机制,让Docker仓库维护变得简单高效。

快速安装与配置

首先需要安装主脚本delete_docker_registry_image.py:

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

然后设置环境变量指向您的Docker Registry数据目录:

export REGISTRY_DATA_DIR=/opt/registry_data/docker/registry/v2

clean_old_versions.py脚本位于项目根目录,可以直接使用。确保您的Python环境已安装requests库:

pip install requests

核心功能详解

1. 按正则表达式筛选镜像和标签

脚本支持使用正则表达式精确匹配要清理的镜像和标签:

# 清理所有以"repo/sitor"开头的镜像 ./clean_old_versions.py --image '^repo/sitor*' # 只清理标签以"0.1."开头的版本 ./clean_old_versions.py --image '^repo/sitor*' --include '^0.1.*' # 排除特定标签(如保留latest标签) ./clean_old_versions.py --image '^repo/sitor*' --exclude '^latest$'

2. 保留最近N个版本

最常见的清理策略是保留最新的几个版本:

# 保留最近5个版本(默认) ./clean_old_versions.py --image '^myapp/*' # 保留最近10个版本 ./clean_old_versions.py --image '^myapp/*' -l 10 # 保留最近2个版本,按创建时间排序 ./clean_old_versions.py --image '^myapp/*' -l 2 -o date

3. 按时间范围清理

按镜像创建时间进行精确筛选:

# 删除2016年1月1日之后创建的版本 ./clean_old_versions.py --image '^repo/*' -a 2016-01-01T00:00:00 # 删除2016年6月25日之前创建的版本 ./clean_old_versions.py --image '^repo/*' -b 2016-06-25T12:00:00 # 删除指定时间范围内的版本 ./clean_old_versions.py --image '^repo/*' -a 2016-01-01T00:00:00 -b 2016-06-25T12:00:00

4. 认证与安全配置

支持需要认证的私有仓库:

# 使用用户名密码认证 ./clean_old_versions.py --image '^repo/*' -U username -P password # 指定Registry URL ./clean_old_versions.py --image '^repo/*' --registry-url http://registry.example.com:5000 # 禁用SSL证书验证(测试环境) ./clean_old_versions.py --image '^repo/*' --no_check_certificate

实用场景与最佳实践

场景一:开发环境日常清理

开发团队每天产生大量测试镜像,可以设置定时任务:

# 每天凌晨清理开发环境,保留最近3个版本 0 2 * * * cd /opt/scripts && ./clean_old_versions.py --image '^dev/*' -l 3 --registry-url http://dev-registry:5000

场景二:生产环境版本控制

生产环境需要更谨慎的清理策略:

# 保留最近10个版本,按创建时间排序,只清理v1.x版本 ./clean_old_versions.py --image '^prod/app/*' -l 10 -o date --include '^v1\\.' --dry-run

场景三:跨项目批量清理

多个项目使用相同命名规范时:

# 清理所有项目的feature分支镜像 ./clean_old_versions.py --image '^.*/.*-feature-.*' -l 2

安全操作指南

1. 始终先进行干运行

在执行实际删除前,务必使用--dry-run参数预览操作:

./clean_old_versions.py --image '^critical-app/*' -l 5 --dry-run

这会显示将要删除的标签列表,但不会执行实际删除操作。

2. 停止Registry服务

在运行清理脚本前,必须停止Docker Registry服务以避免数据损坏:

# 停止Registry服务 docker stop registry # 运行清理脚本 ./clean_old_versions.py --image '^app/*' -l 10 # 重新启动Registry服务 docker start registry # 运行垃圾回收 docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml

3. 备份重要数据

对于关键生产环境,建议先备份:

# 备份Registry数据目录 tar -czf registry-backup-$(date +%Y%m%d).tar.gz $REGISTRY_DATA_DIR

高级配置选项

自定义脚本路径

如果delete_docker_registry_image.py安装在其他位置:

./clean_old_versions.py --image '^app/*' -s /custom/path/delete_docker_registry_image

详细输出模式

需要查看详细执行过程时:

./clean_old_versions.py --image '^app/*' -v --dry-run

故障排除与常见问题

问题1:权限不足

确保脚本有权限访问Registry数据目录:

sudo chmod +x clean_old_versions.py sudo ./clean_old_versions.py --image '^app/*'

问题2:网络连接失败

检查Registry URL和网络连通性:

curl http://localhost:5000/v2/_catalog

问题3:正则表达式不匹配

使用更宽松的正则表达式进行测试:

# 先使用简单的模式测试 ./clean_old_versions.py --image 'app' --dry-run

自动化集成方案

与CI/CD流水线集成

在Jenkins、GitLab CI等工具中集成清理任务:

# GitLab CI示例 clean_registry: stage: cleanup script: - pip install requests - ./clean_old_versions.py --image "^${CI_PROJECT_PATH}/*" -l 10 --dry-run - ./clean_old_versions.py --image "^${CI_PROJECT_PATH}/*" -l 10 only: - schedules

定时任务配置

使用cron定时执行清理:

# 每周日凌晨3点清理 0 3 * * 0 /usr/local/bin/clean_old_versions.py --image '^.*/*' -l 20 --registry-url http://registry:5000 >> /var/log/docker-cleanup.log 2>&1

性能优化建议

1. 分批处理大型仓库

对于包含大量镜像的仓库,建议分批处理:

# 按项目分批清理 for project in frontend backend database; do ./clean_old_versions.py --image "^${project}/*" -l 15 done

2. 避免高峰期操作

选择系统负载较低的时段执行清理:

# 凌晨执行 0 2 * * * /path/to/clean_old_versions.py --image '^.*/*' -l 10

3. 监控清理效果

记录清理操作的统计信息:

./clean_old_versions.py --image '^app/*' -l 5 2>&1 | tee -a /var/log/registry-cleanup-$(date +%Y%m%d).log

总结

clean_old_versions.py是管理Docker私有仓库存储空间的强大工具。通过灵活的筛选条件和智能的版本保留策略,您可以:

  1. 自动化清理流程:减少手动操作,提高效率
  2. 精确控制保留策略:按时间、版本号、正则表达式多维度筛选
  3. 保障数据安全:干运行模式和备份机制确保操作安全
  4. 无缝集成现有系统:支持CI/CD流水线和定时任务

开始使用clean_old_versions.py,让您的Docker Registry始终保持整洁高效!🚀

提示:在实际生产环境使用前,请务必在测试环境中充分验证清理策略,确保不会误删重要镜像版本。

【免费下载链接】delete-docker-registry-imageIf you are running a private v2 docker registry, and you are storing your data on disk, running this script from the machine where the data lives will let you fully delete an image or tag项目地址: https://gitcode.com/gh_mirrors/de/delete-docker-registry-image

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询