从 Registry Y 拉取、标记和推送镜像到 Registry X

Pull, Tag and Push an Image from Registry Y to Registry X

目前,我们的 CI/CD 环境是基于云的 Kubernetes。 由于性能优势,Kubernetes Cloud Providers 最近删除了 docker 守护进程。例如 Google Kubernetes Engine 或 IBM Cloud Kubernetes 仅具有 Containerd 运行 时间,运行 而不是 build 容器图像。

kaniko or jib 等许多工具可以解决这个问题。它们提供了一种无需 docker 守护进程即可非常有效地构建 docker 图像的方法。

问题来了:

  1. Image "registry-x.com/repo/app1:v1-snapshot" 从 CI 中的 jib 构建到 registry-x。
  2. 映像 "registry-x.com/repo/app1:v1-snapshot" 然后在某个时间点进行部署和测试,如果测试成功,则需要将其交付给注册表 Y,并且需要在注册表 X 中标记为稳定版本。

所以图像 "registry-x.com/repo/app1:v1-snapshot" 需要从 "registry-x.com/repo/app1:v1-snapshot" 标记到 "registry-x.com/web/app1:v1-release" 然后它还需要用 "registry-y.com/web/app1:v1-release" 标记并且都需要被推送。

结果:来自开发的快照镜像在两个注册中心都可用,带有发布标签。

那么如何在没有 docker 守护进程的情况下执行这 3 个简单的操作(拉、标记、推)?似乎 kaniko 和 jib 不是办法。

我不想订购 VM 只是为了获得 docker 守护程序来执行这些操作。而且我还知道 Jib 能够推送到多个注册中心。但它不能只重命名图像。

也与去年的这个问题有关: Clone an image from a docker registry to another

此致,莱昂

Docker 注册表提供了一个 HTTP API,因此您可以使用这些方法来拉取和推送图像。

有几个库提供了更高的抽象层(docker-registry-client in Go, docker-registry-client in Js,等等)。

无论如何,流量都会