镜像生命周期管理需通过自动策略防范磁盘耗尽与运维低效:Harbor支持标签/时间/数量多维保留策略并可定时触发;Registry依赖手动GC配合API删tag;Nexus Pro提供条件组合清理策略;通用实践强调保留稳定标签、分环境策略、校验引用及日志告警。

镜像生命周期管理是 Docker 仓库(尤其是私有仓库如 Harbor、Nexus、Docker Registry)稳定运行的关键环节。不加约束的镜像堆积会导致磁盘耗尽、推送拉取变慢、清理困难,而手动删除既低效又易出错。合理的策略应兼顾业务需求、合规要求与运维效率,核心在于“按规则自动识别 + 安全触发清理”。
Harbor 的镜像保留策略(Retention Policy)
Harbor v2.0+ 内置图形化镜像保留功能,支持基于标签、时间、数量等多维度组合策略,无需额外脚本。
-
按标签匹配:支持正则表达式,例如
^v[0-9]+\.[0-9]+\.[0-9]+$匹配语义化版本,^main$|^develop$保护主干分支镜像 - 按推送/拉取时间:可设置“保留最近 N 天内推送的镜像”,或“保留最近 N 次拉取的镜像”
-
按数量限制:对每个项目或每个标签前缀(如
app-),最多保留指定数量的镜像(按推送时间倒序) - 策略执行方式:配置后需手动点击“触发”或通过 API 调用启动;支持设置定时任务(需开启 Harbor 的 cron 服务)
Docker Registry 原生清理(无 UI 场景)
原生 Registry 不提供内置清理机制,依赖 registry garbage-collect 命令配合清单文件筛选,操作分两步:
-
生成待删除清单:使用
registry-cli或自定义脚本遍历_catalog和各仓库的manifests,结合last_modified时间戳或标签名规则导出 digest 列表 -
执行垃圾回收:运行
docker exec registry /bin/registry garbage-collect --dry-run /etc/docker/registry/config.yml预览;确认后去掉--dry-run并确保 registry 配置中delete.enabled: true -
注意点:GC 只删无引用的 layer 和 manifest,不会删 tag;需先调用 API 删除 tag(
DELETE /v2/),再 GC 才能释放空间/manifests/
Nexus Repository Manager 清理策略
Nexus 支持基于 Docker 仓库类型的“Cleanup Policies”,适用于 Nexus Pro(OSS 版不支持):
- 条件组合灵活:可同时设置“标签匹配正则”+“最后修改时间早于 X 天”+“保留最少 Y 个镜像”
- 关联到仓库生效:在仓库配置页的 “Cleanup Policies” 下拉框中绑定策略,并启用 “Apply cleanup policy”
- 执行时机:策略在每次上传新镜像时自动评估旧镜像;也可通过 Scheduled Tasks 设置每日凌晨扫描执行
通用最佳实践与避坑提醒
无论使用哪种仓库,以下原则能显著降低误删与维护成本:
-
永远保留至少一个稳定标签:如
latest、stable、v1-lts,避免策略无差别匹配导致线上环境断供 - 区分测试与生产仓库:为 CI/CD 流水线专用仓库设置更激进的清理(如仅保留 7 天),生产仓库则延长保留期并增加审批流程
- 清理前强制校验引用关系:尤其在多项目共享基础镜像时,避免因某项目删除 base 镜像导致其他项目构建失败
- 记录与告警不可少:将清理日志接入 ELK 或 Loki;当单次清理释放空间 >10GB 或删除镜像数 >100 时,自动发企业微信/钉钉通知










