首页 > 解决方案 > 在 Azure Pipelines 中每次成功构建时将图像推送到集线器时,如何管理 Docker Hub 上的图像?

问题描述

我正在使用基于微服务的架构,并且为每个微服务构建了单独的管道。我使用 Docker BuildandPush 作为 Azure 构建管道中的一个阶段,并且在每次成功构建时,图像都会被推送到 DockerHub。

现在,我主要关心的是随着时间的推移,我的 DockerHub 注册表会填充冗余图像,那么如何通过任何管道阶段或脚本自动清除这些冗余图像?

标签: dockerazure-devopsazure-pipelines-build-taskdockerhubdocker-image

解决方案


您可以通过注册表 REST API 删除图像。为此,您需要知道 docker 映像名称和要删除的摘要。一个图像可以通过它的name和从注册表中删除referencereference必须是摘要,否则删除将失败。

调用休息 API:

DELETE http://registryhost:reigstryport/v2/<docker_image_name>/manifests/<reference>

例如:

curl -v -X DELETE https://my.docker.registry.com:5000/v2/mytestdockerrepo/manifests/sha256:66675d81b9bd5eafc105832b78abb91cab975bbcf028ca4bce4afe73f66914ee

您应该获得 202 Accepted 成功调用。如果图像已被删除或不存在,则会发出 404 Not Found 响应。

注意从 2.3 或更高版本的注册表中删除清单时,必须在 HEAD 或 GET-ing 清单时使用以下标头以获取要删除的正确摘要:

Accept: application/vnd.docker.distribution.manifest.v2+json

有关详细信息,请参阅此文档


推荐阅读