Какова цель docker_registry_image в провайдере terraform docker? - PullRequest
0 голосов
/ 01 августа 2020

Я учусь эффективно работать с docker изображениями, используя terraform, в частности, я хотел бы сократить время, затрачиваемое на загрузку mysql изображений из реестра

Я знаю, что ресурсы docker_image имеют keep_locally аргумент, который, как я понимаю, загрузит новый образ только в том случае, если он не найден в локальном хранилище docker машины, но я также хотел бы загрузить новый образ на случай, если есть более обновленный

Я обнаружил, что есть docker_registry_image, и понял, что pull_triggers позволит terraform понять, когда будет новое обновление, и загрузить его только тогда

provider "docker" {
  host = "npipe:////.//pipe//docker_engine"
}

data "docker_registry_image" "mysql" {
  name = "mysql:8"
}

resource "docker_image" "mysql" {
  name         = data.docker_registry_image.mysql.name
  pull_triggers = [data.docker_registry_image.mysql.sha256_digest]
  keep_locally = true
}

resource "docker_container" "mysql" {
  name    = "mysql"
  image   = docker_image.mysql.latest
        restart = "always"
  env     = [
    "MYSQL_ROOT_PASSWORD=root"
  ]
  volumes {
    volume_name    = "mysql-vol"
    container_path = "/var/lib/mysql"
  }
  ports {
    internal = 3306
    external = 3306
  }
}

provider "mysql" {
  endpoint = "127.0.0.1:3306"
  username = "root"
  password = "root"
}

resource "mysql_database" "test" {
  name = "test"
}

Вот мой код, и я просто хотел бы знать, делает ли он то, что я думаю, а именно загружает новый образ, только если новый находится в реестре, и использует локальный образ в случай нет

1 Ответ

0 голосов
/ 02 августа 2020

Да. docker_registry_image предоставит метаданные для изображения mysql:8. Он будет иметь следующий вид:

{
  "id" = "sha256:f1f10a8a6014bda907889c2f649d7b832398432b6eb4849331818f01533db293"
  "name" = "mysql:8"
  "sha256_digest" = "sha256:f1f10a8a6014bda907889c2f649d7b832398432b6eb4849331818f01533db293"
}

Дайджест будет соответствовать последней версии того, что находится на docker hub здесь :

введите описание изображения здесь

Затем docker_image сравнивает то, что было загружено ранее, с тем, что находится на хабе docker. Если на хабе docker есть новая версия, основанная на sha256_digest, нужно вытащить новый образ.

...