配置镜像仓库生命周期策略的核心是自动识别并清理无用镜像,需结合标签规则、时间窗口和引用状态;harbor启用项目级保留策略,registry依赖api脚本+gc,nexus pro使用条件组合清理任务,通用原则强调校验引用关系与兜底保障。

配置镜像仓库的生命周期策略,核心是让系统自动识别并清理无用镜像,而不是等磁盘快满时再人工干预。关键在于结合标签规则、时间窗口和引用状态做安全删减。
Harbor:启用内置的项目级保留策略
Harbor 2.0+ 原生支持基于标签、时间、数量的多维保留策略,且可定时触发。进入项目 → “策略” → “镜像保留策略”,推荐配置:
- 保留最新 5 个带 version 前缀的标签(如
v1.2.0,v1.2.1),排除latest和时间戳类标签 - 对
dev-或pr-开头的标签,只保留最近 7 天内创建 的镜像 - 勾选“仅保留被至少一个容器或 Helm Chart 引用的镜像”,避免误删正在使用的镜像
- 设置执行周期为每天凌晨 2 点,启用后 Harbor 会自动调用 GC 清理未被策略保留的 manifest 和 blob
原生 Registry:手动 GC + API 脚本化清理
官方 registry 不自带策略引擎,需配合外部脚本与定期 GC。流程分两步:
- 先用 registry API 获取指定仓库所有标签,按
created时间戳排序,筛选出应删除的旧标签 - 通过
GET /v2/<repo>/manifests/<tag></tag></repo>获取 digest,再用DELETE /v2/<repo>/manifests/<digest></digest></repo>删除 - 最后执行
registry garbage-collect /etc/docker/registry/config.yml回收底层 blob 存储 - 建议将上述逻辑封装为 cron 脚本,每日清理超过 30 天且无 tag 关联的镜像
Nexus Repository Pro:使用条件组合清理任务
Nexus Pro 提供图形化清理策略配置,适合混合格式仓库(Docker + Maven + npm)统一管理:
- 新建 Docker 类型清理任务,条件设为:last blob updated before 30 days ago 且 no active tag reference
- 可叠加“排除包含 stable 或 lts 的标签”,防止误删长期支持版本
- 启用“预览模式”运行一次,确认待删列表合理后再开启自动执行
- 建议搭配 Nexus 的任务日志与 Slack Webhook 告警,确保每次清理可追溯
通用原则:不依赖单一维度,必须校验引用关系
单纯按时间或数量删镜像风险很高。生产环境务必做到:
- 所有策略前加一步:调用 Kubernetes 或 CI 系统 API,检查该镜像是否仍在 Deployment / ArgoCD 应用清单中被引用
- 保留至少一个
stable标签和一个latest标签(即使内容相同),作为回滚兜底 - 清理前生成报告(如 JSON 列表含镜像名、digest、最后拉取时间、关联服务),存档 90 天
- 首次启用策略时,先设为“只记录不删除”模式运行 3 天,验证逻辑无误再切为执行态











