GitLab容器注册表:有没有办法自动删除旧容器?

GitLab容器注册表:有没有办法自动删除旧容器?,gitlab,Gitlab,我们有一个GitLab CI管道,它基于Hashicorp Vault机密后端的外部ETCD快照构建一个新的Docker映像。该映像用于灾难恢复,因此我们对在注册表中保留旧版本不感兴趣 是否有任何方法可以清除超过某个日期的GitLab注册表容器映像。或者保留最大数量的最近图像并删除其余图像 谢谢 S如果您只需要一个图像,一个简单的方法就是始终推送到注册表。例如:registry.example.com/group/project/image:latest。这将覆盖现有的 如果您想用提交散列或类似

我们有一个GitLab CI管道,它基于Hashicorp Vault机密后端的外部ETCD快照构建一个新的Docker映像。该映像用于灾难恢复,因此我们对在注册表中保留旧版本不感兴趣

是否有任何方法可以清除超过某个日期的GitLab注册表容器映像。或者保留最大数量的最近图像并删除其余图像

谢谢


S

如果您只需要一个图像,一个简单的方法就是始终推送到注册表。例如:registry.example.com/group/project/image:latest。这将覆盖现有的

如果您想用提交散列或类似的方法来标记图像,这将更加困难。 不幸的是,目前还没有办法自动清理旧图像,但这是一项非常需要的功能,请参见开放问题:

目前,人们已经找到了解决办法。例如

  • 要在手动GitLab CI作业中用于删除的docker映像 旧图像:
  • 用于在GitLab Docker注册表中查找和(软)删除未标记Docker图像的Python包: (2019-08年更新,见下文)
这两个都是有趣的项目,可以帮助你现在。如果您可以等待的话,我预计GitLab将在接下来的几个月内实现实际的注册表清理功能


于2019-08年更新

自GitLab 11.10版以来,GitLab ctl注册表将进行垃圾收集 命令具有--delete manifests标志,可用于删除 所有未标记的Docker图像。这个项目不再需要了。

运行以下命令:

sudo gitlab-ctl registry-garbage-collect -m
引入了“标签过期策略”

并通过以下方式增强该功能:

定义策略以确保从不删除重要图像 在使用GitLab的映像过期策略时,无法表达诸如“无论如何,不要删除此标记”之类的内容。
这会给删除过程带来风险,因为可能会删除版本或主映像,这些映像应该是不可变的

在13.0中,我们很高兴地宣布,您现在可以更新项目的过期策略,以确定您永远不希望删除的图像。
只需启用策略并使用正则表达式来标识要保留的映像

见和


以及(2020年10月):

容器注册表清理策略的主要改进 当使用标记清理策略从容器注册表中删除不需要的标记时,您可能已经注意到,标记并非总是像预期的那样被删除。
因此,很可能您必须使用GitLab API手动干预,或者您忽略了该问题,并随后经历了更高的存储成本

有两个可能导致问题的潜在问题。第一个问题涉及到。此问题解决了在用户界面中创建的某些策略失败的错误,因为
用户
未传递给

此外,您可能遇到运行策略但仅部分完成的问题。当策略尝试删除多个图像而超时时,会发生这种情况。如果发生这种情况,它将在策略的下一次计划运行中继续删除标记。向前看,您将看到一条警告,表示仍有部分运行的策略。这样,您就可以决定是否要手动干预

我们还计划对此功能进行其他一些改进,包括和

见和


谢谢,实际上我们用
latest
和特定于版本的标记来标记最新的图像,所以我们希望删除的是版本化的图像。管道按计划运行,因此在我们的场景中,容器的构建是不可避免的。我们将等待修复:)似乎有一个用于删除标记的API,它可以作为预定管道的一部分调用:自GitLab 12.8(2020年2月)和GitLab 13.0(2020年5月)以来,“标记过期策略”可能会有所帮助。看见