mysql - 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"
}
这是我的代码,我只想知道它是否像我认为的那样做,即仅当注册表中有新图像时才下载新图像,并在没有时使用本地图像
解决方案
是的。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
则应根据 , 拉取新图像。
推荐阅读
- jmeter - 如何使用 timeshift 函数在 Jmeter 中以毫秒为单位生成未来时间
- flutter - 在“颤动”下发现意外的孩子“生成”
- sql-server - 如何将 SAS 创建的表移动到 sql server 中的不同文件组
- mysql - 自定义 TYPO3 v10 扩展中缺少列 UID
- r - 使用动态变量名进行变异
- javascript - 构建 /@types/lodash/common/object.d.ts (1188,142) 时出现 lodash 错误:'(' 预期
- apache-spark - 在使用另一个数据帧调用的 UDF 中过滤数据帧
- c++ - How to programmatically differentiate between dvd or mini dvd disk inserted?
- android - Android BLE 广告不能超过 20 字节
- c# - 如何从 API 中获取版本详细信息