将映像从Docker注册表移至GCR

时间:2019-10-31 06:22:15

标签: google-cloud-platform gcloud google-cloud-run

Google云运行不支持docker注册表,因此我必须手动拉出图像,对其进行标记并将其推送到GCR。

  

容器图片网址应与[region。] gcr.io/repo-path [:tag或@digest]模式匹配

有没有更简单的方法来做到这一点?

3 个答案:

答案 0 :(得分:4)

不幸的是,这是将Docker映像从一个容器注册表移至另一个容器注册表的最简单方法。

仅出于文档目的,我将添加以下步骤以使社区受益:

  1. 使用以下命令拉出Docker映像:
  

docker pull [REPOSITORY-NAME] / [IMAGE]:[TAG]

  1. 然后,使用以下命令标记拉出图像的图像:
  

docker标签[IMAGE] gcr.io/[PROJECT-ID] / [IMAGE]

  1. 使用以下命令将该图像推送到您的gcr存储库中:
  

docker push gcr.io/[PROJECT-ID] / [IMAGE]

答案 1 :(得分:0)

在任何情况下,恐怕“简单”都不是问题。不过,您可以尝试使用Docker web hooks调用简单的Cloud函数(拉,标记,推),以使图像在GCR中保持同步。

似乎有一些项目可以解决类似dregsy这样的麻烦,但是我没有尝试过...

答案 2 :(得分:0)

我一直在开发一些名为 regclient 的工具来支持此用例。对于复制单个图像,命令是:

regctl image copy ${source} ${target}

例如

regctl image copy ubuntu:latest gcr.io/your-project/ubuntu:latest

这会在使用 HEAD 请求复制之前检查摘要,以允许频繁运行命令,但仅在上游映像与 GCR 上的内容不匹配时才使用您的配额。它还复制使用 docker pulldocker push 无法获得的多平台图像(docker 在拉取时将图像取消引用到您的平台)。与 docker pull 不同的是,单个层仅在目标注册表中不存在时才被复制。

如果您有大量图像要连续镜像,还有一个 regsync 命令可根据包含图像列表、标签和运行副本的计划的 yaml 文件进行复制。

这些可以作为容器运行,但它们也可以作为不需要 docker 运行的独立二进制文件。