您可以通过 Terraform 在 GCP 中 运行 Docker 容器吗?
Can you run Docker containers in GCP via Terraform?
我已经使用 Terraform 在 GCP 中创建了一个 Docker 图像,我想 运行。我已经标记并将图像推送到 GCR,如下所示:
docker tag carlspring/hello-spring-boot:1.0 eu.gcr.io/${PROJECT_ID}/carlspring/hello-spring-boot:1.0
docker push eu.gcr.io/carlspring/carlspring/hello-spring-boot:1.0
我有以下代码:
provider "google" {
// Set this to CREDENTIALS
credentials = file("credentials.json")
// Set this to PROJECT_ID
project = "carlspring"
region = "europe-west2"
zone = "europe-west2-a"
}
resource "google_compute_network" "vpc_network" {
name = "carlspring-terraform-network"
}
resource "google_compute_instance" "docker" {
count = 1
name = "tf-docker-${count.index}"
machine_type = "f1-micro"
zone = var.zone
tags = ["docker-node"]
boot_disk {
initialize_params {
image = "carlspring/hello-spring-boot"
}
}
}
完成后:
terraform init
terraform plan
terraform apply
我得到:
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
google_compute_instance.docker[0]: Creating...
Error: Error resolving image name 'carlspring/hello-spring-boot': Could not find image or family carlspring/hello-spring-boot
on main.tf line 18, in resource "google_compute_instance" "docker":
18: resource "google_compute_instance" "docker" {
我在网上看到的示例要么使用 K8s,要么启动 VM 映像 运行ning 一个 Linux,其中安装了 Docker 并且正在启动一个映像。不能直接用自己的容器来启动实例吗?
下一行表示图片不存在:
Error: Error resolving image name 'carlspring/hello-spring-boot': Could not find image or family carlspring/hello-spring-boot
您应该将图像标记为 eu.gcr.io/carlspring/hello-spring-boot:1.0
。
或者,将 boot_disk
块中的图像引用更改为 eu.gcr.io/carlspring/carlspring/hello-spring-boot:1.0
。
google_compute_instance
需要 VM 映像,而不是 Docker 映像。如果您想将 Docker 图像部署到 GCP,最简单的选择是 Cloud 运行。要将它与 Terraform 一起使用,您需要 cloud_run_service.
例如:
resource "google_cloud_run_service" "default" {
name = "cloudrun-srv"
location = "us-central1"
template {
spec {
containers {
image = "eu.gcr.io/carlspring/carlspring/hello-spring-boot:1.0"
}
}
}
traffic {
percent = 100
latest_revision = true
}
}
请注意,我使用的是 eu.gcr.io/carlspring/carlspring/hello-spring-boot:1.0
而不是 carlspring/hello-spring-boot
。您必须使用完全限定名称作为指向 Docker 集线器的短名称,您的图像将在该集线器中找不到。
Terraform 可用于创建具有 Docker 图片的 GCP VM 实例。
这是一个例子:https://github.com/terraform-providers/terraform-provider-google/issues/1022#issuecomment-475383003
希望对您有所帮助。
您可以使用 GCE 中的虚拟机执行此操作,其操作系统基于 Google 提供的容器 OS 映像。然后,您可以 use this terraform module 促进容器图像的获取和 运行。
我已经使用 Terraform 在 GCP 中创建了一个 Docker 图像,我想 运行。我已经标记并将图像推送到 GCR,如下所示:
docker tag carlspring/hello-spring-boot:1.0 eu.gcr.io/${PROJECT_ID}/carlspring/hello-spring-boot:1.0
docker push eu.gcr.io/carlspring/carlspring/hello-spring-boot:1.0
我有以下代码:
provider "google" {
// Set this to CREDENTIALS
credentials = file("credentials.json")
// Set this to PROJECT_ID
project = "carlspring"
region = "europe-west2"
zone = "europe-west2-a"
}
resource "google_compute_network" "vpc_network" {
name = "carlspring-terraform-network"
}
resource "google_compute_instance" "docker" {
count = 1
name = "tf-docker-${count.index}"
machine_type = "f1-micro"
zone = var.zone
tags = ["docker-node"]
boot_disk {
initialize_params {
image = "carlspring/hello-spring-boot"
}
}
}
完成后:
terraform init
terraform plan
terraform apply
我得到:
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
google_compute_instance.docker[0]: Creating...
Error: Error resolving image name 'carlspring/hello-spring-boot': Could not find image or family carlspring/hello-spring-boot
on main.tf line 18, in resource "google_compute_instance" "docker":
18: resource "google_compute_instance" "docker" {
我在网上看到的示例要么使用 K8s,要么启动 VM 映像 运行ning 一个 Linux,其中安装了 Docker 并且正在启动一个映像。不能直接用自己的容器来启动实例吗?
下一行表示图片不存在:
Error: Error resolving image name 'carlspring/hello-spring-boot': Could not find image or family carlspring/hello-spring-boot
您应该将图像标记为 eu.gcr.io/carlspring/hello-spring-boot:1.0
。
或者,将 boot_disk
块中的图像引用更改为 eu.gcr.io/carlspring/carlspring/hello-spring-boot:1.0
。
google_compute_instance
需要 VM 映像,而不是 Docker 映像。如果您想将 Docker 图像部署到 GCP,最简单的选择是 Cloud 运行。要将它与 Terraform 一起使用,您需要 cloud_run_service.
例如:
resource "google_cloud_run_service" "default" {
name = "cloudrun-srv"
location = "us-central1"
template {
spec {
containers {
image = "eu.gcr.io/carlspring/carlspring/hello-spring-boot:1.0"
}
}
}
traffic {
percent = 100
latest_revision = true
}
}
请注意,我使用的是 eu.gcr.io/carlspring/carlspring/hello-spring-boot:1.0
而不是 carlspring/hello-spring-boot
。您必须使用完全限定名称作为指向 Docker 集线器的短名称,您的图像将在该集线器中找不到。
Terraform 可用于创建具有 Docker 图片的 GCP VM 实例。 这是一个例子:https://github.com/terraform-providers/terraform-provider-google/issues/1022#issuecomment-475383003
希望对您有所帮助。
您可以使用 GCE 中的虚拟机执行此操作,其操作系统基于 Google 提供的容器 OS 映像。然后,您可以 use this terraform module 促进容器图像的获取和 运行。