如何从私有Docker注册表中删除映像?

狮子座

我运行了一个私有Docker注册表,我想latest从存储库中删除除以外的所有图像我不想删除整个存储库,仅删除其中的一些图像。API文档不提一个办法做到这一点,但肯定这是可能的?

康拉德·克莱恩(Konrad Kleine):

当前,您无法将注册表API用于该任务。它仅允许您删除存储库或特定标签。

通常,删除存储库意味着删除与此仓库关联的所有标签。

删除标签意味着删除图像和标签之间的关联。

以上所有都不删除单个图像。它们留在您的磁盘上。


解决方法

对于此解决方法,您需要将docker映像存储在本地。

解决方案的一种解决方法是删除除最新标签以外的所有标签,从而潜在地删除对关联图像的引用。然后,您可以运行此脚本来删除所有图像,这些图像未被任何标签或任何已使用图像的祖先所引用。

术语(图像和标签)

考虑一个这样的图像图,其中大写字母(A,,B...)表示短图像ID,并<-表示一个图像基于另一个图像:

 A <- B <- C <- D

现在,我们向图片添加标签:

 A <- B <- C <- D
           |    |
           |    <version2>
           <version1>

在此,标签<version1>引用了图像C,标签<version2>引用了image D

完善您的问题

在您的问题中,您说过您想删除

所有图片,但 latest

现在,该术语不太正确。您混合了图像和标签。查看图表,我认为您同意该标记<version2>代表最新版本。实际上,根据此问题,您可以具有代表最新版本的标签:

 A <- B <- C <- D
           |    |
           |    <version2>
           |    <latest>
           <version1>

由于<latest>标签引用了图像,D所以我问您:除了图像之外,您是否真的要删除所有内容D可能不是!

如果删除标签会怎样?

如果<version1>使用Docker REST API 删除标签,则会得到以下信息:

 A <- B <- C <- D
                |
                <version2>
                <latest>

切记: Docker永远不会删除映像!即使这样做,在这种情况下也无法删除图像,因为该图像CD被标记图像的祖先的一部分

即使使用此脚本,也不会删除任何图像。

何时可以删除图像

在您可以控制何时有人可以拉入或推入注册表的条件下(例如,通过禁用REST接口)。如果没有其他图像基于该图像并且没有标签引用该图像,则可以从图像图中删除该图像。

请注意,下面的图,该图像D没有根据C,但对B因此,D不依赖C如果您<version1>在此图中删除标签,则该图像C将不会被任何图像使用,并且此脚本可以将其删除。

 A <- B <--------- D
      \            |
       \           <version2>
        \          <latest>
         \ <- C
              |
              <version1>

清理后,您的图像图如下所示:

 A <- B <- D
           |
           <version2>
           <latest>

这是你想要的吗?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Codefresh私有注册表中列出Docker映像?

私有注册表和本地映像注册表之间的docker区别?

如何从Azure私有注册表获取Docker映像列表

Pulumi-如何从私有注册表中提取Docker映像?

在Go的私有注册表中检查docker映像是否存在

如何从一个私有注册表中提取Docker映像并将其推送到Jenkins管道中的另一个不同的私有注册表中

如何从Azure容器注册表中删除映像

如何检查注册表中是否存在带有特定标签的Docker映像?

如何在gitlab中安全登录到私有Docker注册表?

如何将私有注册表添加到Docker查询列表中?

在ECS上的pulumi中使用来自私有Docker注册表的映像

Docker-无法将映像推送到私有注册表

Docker-检查私有注册表映像版本

Docker:无法提取已推送到私有注册表的映像

如果注册表中不存在映像,则私有Docker注册服务器将从Docker集线器中拉出

使用私有注册表中的映像部署Pod时发生CrashLoopBackOff

Gitlab CI不适用于Gitlab注册表中的私有映像

为什么我不能在私有Docker注册表(v2)中删除图层?

从Openshift的内部Docker注册表中删除未使用的Docker映像?

使用Docker私有注册表的Kubernetes中没有ssl的Docker拉镜像

基本映像更新后,如何更新azure容器注册表中的所有映像

Docker私有注册表是否有默认端口

带有镜像的Docker私有注册表

我可以将云运行与自托管/私有Docker映像注册表一起使用吗?

如何在Docker配置文件中指定Docker私有注册表凭证?

AKS 无法从 GitHub 私有注册表中提取映像,但 Minikube 可以提取相同的映像

使用https访问Docker私有注册表

Docker私有注册表和默认安装程序

私有 docker 注册表的设置通知