Можете ли вы запускать Docker контейнеров в GCP через Terraform? - PullRequest
1 голос
/ 13 марта 2020

Я создал Docker изображение, которое я хотел бы запустить в GCP, используя Terraform. Я пометил и вставил изображение в 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, либо запускают образ виртуальной машины с Linux, в котором установлен Docker и запускается образ. Разве я не могу просто использовать свой собственный контейнер для запуска экземпляра?

Ответы [ 3 ]

3 голосов
/ 13 марта 2020

google_compute_instance ожидает образ виртуальной машины, а не 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, где ваше изображение не будет найдено.

2 голосов
/ 13 марта 2020

Следующая строка указывает на то, что изображение не существует:

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.

1 голос
/ 13 марта 2020

Terraform можно использовать для создания экземпляра виртуальной машины GCP с Docker образом. Вот пример: https://github.com/terraform-providers/terraform-provider-google/issues/1022#issuecomment -475383003

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...