1

我正在编写一个工具来从任何容器注册表同步容器映像。为了同步图像,我需要一种方法来检查 localimage:tag是否与 remote 不同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 图像,但尚不清楚它们的技术细节。

4

1 回答 1

0

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

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

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

于 2021-12-08T09:51:58.977 回答