使用 terraform 将容器镜像从一个 Google 项目复制到另一个项目
Copy container image from one Google project to another using terraform
我在“项目 A”的容器注册表中有一个映像,想将其复制到“项目 B”的容器注册表。我如何使用 terraform 做到这一点?
我认为你不应该,但这并不意味着你不能。
不要
Terraform 是管理 基础设施 的优秀工具;它不适合与数据或应用程序代码交互。这两者之间的界限可能很难划清,尤其是对于 GCP 的高级服务,如 AppEngine、Cloud 运行、...,但在我看来,容器 registry 可以被视为基础设施,容器 image 应被视为数据(或代码),而不是在 Terraform 中进行管理。不要这样做!
可是我真的很想...
嘿,我要评判谁?也许有一些关于你的特殊问题的东西我不知道。没有用于复制图像或与图像交互的 GCP 资源,但您可以将 GCR 作为通用容器注册表进行交互。您可以使用社区模块 neomantra/mirror/docker
. Its 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 中图像的句柄。
Fyi,如果您正在迁移,请考虑迁移到 Artifact Registry,因为 Google 正在弃用 Container Registry,转而支持 Artifact Registry。
我在“项目 A”的容器注册表中有一个映像,想将其复制到“项目 B”的容器注册表。我如何使用 terraform 做到这一点?
我认为你不应该,但这并不意味着你不能。
不要 Terraform 是管理 基础设施 的优秀工具;它不适合与数据或应用程序代码交互。这两者之间的界限可能很难划清,尤其是对于 GCP 的高级服务,如 AppEngine、Cloud 运行、...,但在我看来,容器 registry 可以被视为基础设施,容器 image 应被视为数据(或代码),而不是在 Terraform 中进行管理。不要这样做!
可是我真的很想...
嘿,我要评判谁?也许有一些关于你的特殊问题的东西我不知道。没有用于复制图像或与图像交互的 GCP 资源,但您可以将 GCR 作为通用容器注册表进行交互。您可以使用社区模块 neomantra/mirror/docker
. Its 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 中图像的句柄。
Fyi,如果您正在迁移,请考虑迁移到 Artifact Registry,因为 Google 正在弃用 Container Registry,转而支持 Artifact Registry。