简介:本文详细介绍Harbor镜像仓库中老镜像的删除方法与优化策略,帮助开发者高效管理镜像存储,降低存储成本并提升仓库性能。
在容器化部署成为主流的今天,Harbor作为企业级私有镜像仓库,承载着大量应用镜像的存储与管理任务。然而,随着业务迭代与镜像版本更新,仓库中逐渐积累大量未使用的“老镜像”,不仅占用宝贵存储资源,还可能影响仓库性能与镜像检索效率。本文将围绕Harbor镜像仓库中老镜像的删除策略展开,提供从基础操作到高级优化的全流程指导,帮助开发者高效管理镜像存储。
步骤:
注意事项:
对于自动化清理场景,可通过Harbor API实现批量删除。
示例代码(Python):
import requestsimport json# Harbor配置HARBOR_URL = "https://harbor.example.com"USERNAME = "admin"PASSWORD = "Harbor12345"PROJECT_NAME = "my-project"REPOSITORY = "nginx"# 获取认证tokenauth_url = f"{HARBOR_URL}/api/v2.0/users/current"response = requests.get(auth_url, auth=(USERNAME, PASSWORD), verify=False)token = response.json()["token"]# 获取镜像标签列表tags_url = f"{HARBOR_URL}/api/v2.0/projects/{PROJECT_NAME}/repositories/{REPOSITORY}/artifacts"headers = {"accept": "application/json", "Authorization": f"Bearer {token}"}tags_response = requests.get(tags_url, headers=headers, verify=False)tags = [tag["tags"][0]["name"] for tag in tags_response.json() if tag["tags"]]# 删除旧标签(按创建时间排序后保留最新3个)tags.sort(key=lambda x: x["id"], reverse=True) # 实际需通过API获取创建时间,此处简化tags_to_delete = tags[3:] # 假设保留最新3个for tag in tags_to_delete:delete_url = f"{HARBOR_URL}/api/v2.0/projects/{PROJECT_NAME}/repositories/{REPOSITORY}/artifacts/{tag}"requests.delete(delete_url, headers=headers, verify=False)print(f"Deleted tag: {tag}")
关键点:
Harbor官方提供harbor-cli工具,支持命令行操作。
安装与使用:
# 安装harbor-cli(需从Harbor Release页面下载)wget https://github.com/goharbor/harbor-cli/releases/download/v1.0.0/harbor-cli-linux-amd64chmod +x harbor-cli-linux-amd64mv harbor-cli-linux-amd64 /usr/local/bin/harbor-cli# 配置Harbor连接harbor-cli config set --url https://harbor.example.com --username admin --password Harbor12345# 删除镜像harbor-cli repository delete --project my-project --repository nginx --tag v1.0.0
通过Harbor的“垃圾回收”(Garbage Collection)功能,结合标签规则自动清理未使用的镜像。
配置步骤:
在CI/CD流水线中嵌入清理逻辑,例如:
示例(GitLab CI):
stages:- build- cleanbuild_image:stage: buildscript:- docker build -t harbor.example.com/my-project/nginx:$CI_COMMIT_SHA .- docker push harbor.example.com/my-project/nginx:$CI_COMMIT_SHAclean_old_images:stage: cleanscript:- |# 获取所有标签并排序TAGS=$(curl -s -u "gitlab-ci-token:$CI_JOB_TOKEN" \"https://harbor.example.com/api/v2.0/projects/my-project/repositories/nginx/artifacts" | \jq -r '.[].tags[0].name' | sort -V)# 保留最新3个标签,删除其余for TAG in $TAGS; doif [[ $(echo "$TAG" | wc -w) -gt 3 ]]; thencurl -X DELETE -u "gitlab-ci-token:$CI_JOB_TOKEN" \"https://harbor.example.com/api/v2.0/projects/my-project/repositories/nginx/artifacts/$TAG"fidone
docker save或Harbor的导出功能)。Harbor镜像仓库中的老镜像清理是容器化环境管理的重要环节。通过结合Web界面、API、CLI工具以及自动化策略,开发者可以高效、安全地释放存储资源,提升仓库性能。建议企业根据自身业务特点,制定定期清理计划,并融入CI/CD流程,实现镜像生命周期的智能化管理。