使用 terraform 将容器映像从一个 Google 项目复制到另一个

问题描述

我在容器注册表中有一个图像,比如“项目 A”,我想将它复制到“项目 B”的容器注册表中。我如何使用 terraform 做到这一点?

解决方法

我认为你不应该,但这并不意味着你不能。

不要 Terraform 是管理基础设施的绝佳工具;它不适合与数据或应用程序代码交互。这两者之间的界限可能很难划清,尤其是对于 GCP 的高级服务,如 AppEngine、Cloud Run 等,但是在 imo 中,容器注册表可以被视为基础设施,一个容器图像 应该被视为数据(或代码),而不是在 Terraform 中进行管理。不要这样做!

但我真的很想... 嘿,我该评判谁?也许你的特定问题有一些我不知道的东西。没有用于复制图像或与图像交互的 GCP 资源,但您可以作为通用容器注册表与 GCR 交互。您可以使用社区模块 neomantra/mirror/docker。它的 sources 很容易阅读和适应;它使用 docker_image 资源将远程映像拉到您的本地计算机,然后适时的 local-exec 将映像docker push 传送到其目的地。

示例用法:

module "docker-mirror-vault" {
  source        = "github.com/neomantra/terraform-docker-mirror?ref=v0.4.0"
  image_name    = "myexample"
  image_tag     = "latest"
  source_prefix = "us.gcr.io/my-one-gcp-project"
  dest_prefix   = "us.gcr.io/my-other-gcp-project"
}

您可以选择使用数据资源 google_container_registry_image 来构建 Container Registry 中映像的句柄。

仅供参考,如果您要迁移,请考虑迁移到 Artifact Registry,因为 Google 正在弃用 Container Registry,转而支持 Artifact Registry。