您可以通过Terraform在GCP中运行Docker容器吗?

时间:2020-03-12 23:35:20

标签: docker google-cloud-platform terraform google-container-os

我创建了一个想要使用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" {

我在网上看到的示例要么使用K8,要么启动运行Linux的VM映像,其中安装了Docker并且正在启动映像。我不能只是简单地使用自己的容器来启动实例吗?

4 个答案:

答案 0 :(得分:3)

google_compute_instance需要VM映像,而不是Docker映像。如果要将Docker映像部署到GCP,最简单的选项是Cloud Run。要将其与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 Hub的简称,在其中找不到您的映像。

答案 1 :(得分:2)

以下行指示该图像不存在:

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

答案 2 :(得分:1)

Terraform可用于通过Docker Image创建GCP VM实例。 这是一个示例:https://github.com/terraform-providers/terraform-provider-google/issues/1022#issuecomment-475383003

希望这会有所帮助。

答案 3 :(得分:0)

您可以使用 GCE 中的虚拟机执行此操作,该虚拟机的操作系统基于 Google 提供的容器操作系统映像。然后,您可以use this terraform module 促进容器映像的获取和运行。