首页 > 解决方案 > terraform docker provider 中 docker_registry_image 的目的是什么?

问题描述

我正在学习如何使用 terraform 有效地处理 docker 图像,特别是我想减少从注册表下载 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"
}

这是我的代码,我只想知道它是否像我认为的那样做,即仅当注册表中有新图像时才下载新图像,并在没有时使用本地图像

标签: mysqlwindowsdockerterraform

解决方案


是的。docker_registry_image将为mysql:8图像提供元数据。它将具有以下形式:

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

摘要将匹配 docker hub 上的最新版本

在此处输入图像描述

然后docker_image将之前下载的内容与 docker hub 上的内容进行比较。如果 docker hub 上有新版本, sha256_digest则应根据 , 拉取新图像。


推荐阅读