检查容器映像是否已更改而不进行拉取的通用方法适用于所有容器注册表



我正在编写一个工具来同步任何容器注册表中的容器映像。为了同步图像,我需要一种方法来检查本地image:tag与远程image:tag是否不同,可能是通过比较图像sha ID(因为图像sha摘要是基于注册表的(。由于我的工具的性质,先提取图像,然后使用docker inspect进行比较是不合适的。

我能找到一些这样或这样的帖子。他们要么告诉我使用docker v2 API获取远程元数据(其中包含图像ID(,然后与本地图像ID进行比较,要么使用container-diff(这似乎是为了解决一个更复杂的问题,在图像内比较包管理系统中的包(。docker v2 API方法并不通用,因为每个注册表(docker.io、grc.io、ecr(都需要不同的头、身份验证等。因此,container-diff似乎是最适合我的选择,但如果本地和远程映像不同,我还没有找到简单输出true/false的方法。此外,这个工具似乎确实在对图像进行区分之前提取了图像。

是否有针对所有注册中心的普遍做法?我看到有一些工具已经实现了这个功能,比如kubernetes的fluxcd,它可以将远程映像同步到本地pod映像,但还不知道它们的技术细节。

在高级别上,您比较SHA值的方法是正确的,但您需要深入了解容器规范,因为它有更多内容。(层和斑点(

已经有一些工具可以将图像从一个注册表复制到另一个注册表。如果图像已经存在于目标中,则默认情况下工具不会复制数据。斯科佩奥是一个很好的起点。

如果您计划从不同的注册表复制映像,则需要单独处理每个注册表。我还建议你去看看海港。Harbor Container Registry能够从内置的各种注册表中复制图像,也可以将图像复制到内置的各种注册中。您可以将Harbor作为您的解决方案或工作的起点。

相关内容

  • 没有找到相关文章

最新更新