如何安全删除Docker Registry镜像?delete-docker-registry-image完整教程

📅 2026/7/21 17:15:44 👁️ 阅读次数 📝 编程学习
如何安全删除Docker Registry镜像?delete-docker-registry-image完整教程

如何安全删除Docker Registry镜像?delete-docker-registry-image完整教程

【免费下载链接】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 Registry作为容器镜像的存储中心,随着使用时间增长会积累大量不再需要的镜像,占用宝贵的存储空间。delete-docker-registry-image是一款专为清理私有Docker Registry设计的高效工具,能帮助管理员安全删除指定镜像或标签,释放磁盘空间。本文将详细介绍如何使用这款工具完成镜像清理任务。

📋 工具简介:为什么选择delete-docker-registry-image?

当你运行私有v2版本Docker Registry且数据存储在本地磁盘时,delete-docker-registry-image脚本可直接在数据所在机器上执行,实现镜像或标签的彻底删除。与Docker官方提供的垃圾回收功能相比,它具有以下优势:

  • 精准控制:支持删除整个仓库或特定标签,避免误删
  • 安全操作:提供干运行(dry-run)模式,执行前预览删除内容
  • 简单易用:无需复杂配置,通过命令行参数即可完成操作
  • 兼容性广:支持多种Docker和Registry版本组合(测试通过的配置包括docker 1.9.1+与registry 2.2.1+等)

核心脚本文件delete_docker_registry_image.py实现了主要清理逻辑,而clean_old_versions.py则提供了基于正则表达式的批量标签清理功能。

🔧 快速安装:两步完成部署

安装过程非常简单,通过curl命令即可直接获取脚本并设置执行权限:

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

执行完成后,可通过delete_docker_registry_image --help验证安装是否成功。

⚙️ 前置配置:环境变量设置

在使用前,需要通过环境变量指定Registry数据目录:

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

默认路径为/opt/registry_data/docker/registry/v2,你也可以直接编辑脚本修改此变量以适应你的部署环境。

⚠️重要安全提示:执行删除操作前必须关闭Registry服务,避免出现竞争条件和数据丢失风险!

🚀 核心功能:常用操作指南

1. 干运行模式:安全预览删除内容

在实际执行删除前,建议先使用--dry-run参数进行预览:

delete_docker_registry_image --image testrepo/awesomeimage --dry-run

此命令会显示将要删除的内容,但不会实际执行删除操作,是验证操作正确性的重要步骤。

2. 删除整个仓库

当需要删除整个镜像仓库时,使用以下命令(确保已关闭Registry服务):

delete_docker_registry_image --image testrepo/awesomeimage

3. 删除特定标签

如需保留仓库只删除某个标签,可在镜像名后添加:标签名

delete_docker_registry_image --image testrepo/awesomeimage:supertag

4. 删除未标记镜像

使用--untagged参数可以清理仓库中所有未标记的镜像数据:

delete_docker_registry_image --image testrepo/awesomeimage --untagged

5. 高级批量清理:clean_old_versions.py

辅助脚本clean_old_versions.py支持基于正则表达式的批量标签清理,例如:

./clean_old_versions.py --image '^repo/sitor*' --include '^0.1.*' -l 2 -b 2016-06-25T12:00:00 -a 2016-01-01T00:00:00 --registry-url http://localhost:5000

此命令会:

  • 匹配所有以repo/sitor开头的镜像
  • 匹配所有以0.1.开头的标签
  • 保留最新的2个标签
  • 仅删除2016-01-01至2016-06-25期间创建的标签

同样支持--dry-run参数进行预览。

🧪 测试验证:确保工具正常工作

项目提供了完整的测试环境,可通过以下步骤验证工具功能:

./test/start_up_vagrant_box_for_running_tests vagrant ssh cd /vagrant ./test/clean_and_run

已知测试通过的配置组合:

  • docker: 1.9.1, registry:2.2.1
  • docker: 1.10.2, registry:2.3.0
  • docker: 1.11.2, registry:2.3.0
  • docker: 1.12.1, registry:2.5.0

⚠️ 注意事项与替代方案

不兼容的版本组合

以下配置已知会导致测试失败,使用时需避免:

  • docker: 1.10.2, registry:2.2.1

Docker官方替代方案

Docker官方在新版本中已内置部分清理功能:

  1. 在registry:2.2+版本中,可通过设置环境变量REGISTRY_STORAGE_DELETE_ENABLED=true启用元数据删除功能
  2. 删除标签后,需执行垃圾回收清理二进制数据:registry garbage-collect /etc/docker/registry/config.yml

官方方案虽然集成度高,但delete-docker-registry-image在灵活性和兼容性方面仍有优势,特别适合需要精细控制的场景。

📝 总结

delete-docker-registry-image提供了一种简单安全的方式来管理Docker Registry存储空间,通过本文介绍的方法,你可以轻松实现镜像的精准清理。无论是单个标签删除还是批量清理,这款工具都能满足你的需求。记得在操作前始终使用--dry-run模式验证,确保数据安全。

项目仓库地址:https://gitcode.com/gh_mirrors/de/delete-docker-registry-image

【免费下载链接】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),仅供参考