我正在编写一个工具来同步任何容器注册表中的容器映像。为了同步图像,我需要一种方法来检查本地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作为您的解决方案或工作的起点。