community.docker.docker_image_build 模块 – 使用 Docker buildx 构建 Docker 镜像

注意

此模块是 community.docker 集合 (版本 4.1.0) 的一部分。

如果您正在使用 ansible 软件包,则可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用: ansible-galaxy collection install community.docker。您需要其他要求才能使用此模块,请参阅 要求 获取详细信息。

要在剧本中使用它,请指定: community.docker.docker_image_build

community.docker 3.6.0 中的新增功能

概要

  • 此模块允许您使用 Docker 的 buildx 插件 (BuildKit) 构建 Docker 镜像。

  • 请注意,此模块并非像经典 Ansible 模块那样具有幂等性。唯一的幂等性检查是构建的镜像是否已存在。可以使用 rebuild 选项禁用此检查。

要求

执行此模块的主机需要以下要求。

  • 带有 Docker buildx 插件的 Docker CLI

参数

参数

注释

api_version

别名:docker_api_version

字符串

Docker 主机上运行的 Docker API 的版本。

默认为此集合和 docker 守护程序支持的最新 API 版本。

如果任务中未指定此值,则将使用环境变量 DOCKER_API_VERSION 的值。如果未设置环境变量,则将使用默认值。

默认值: "auto"

args

字典

提供 key:value 构建参数的字典,这些参数映射到 Dockerfile ARG 指令。

Docker 期望值为字符串。为方便起见,任何非字符串值都将转换为字符串。

ca_path

别名:ca_cert, tls_ca_cert, cacert_path

路径

通过提供 CA 证书文件的路径来执行服务器验证时使用 CA 证书。

如果任务中未指定此值并且设置了环境变量 DOCKER_CERT_PATH,则将使用环境变量 DOCKER_CERT_PATH 指定的目录中的 ca.pem 文件。

cache_from

列表 / 元素=字符串

要考虑作为缓存源的镜像名称列表。

cli_context

字符串

要使用的 Docker CLI 上下文。

docker_host 互斥。

client_cert

别名:tls_client_cert, cert_path

路径

客户端 TLS 证书文件的路径。

如果任务中未指定此值并且设置了环境变量 DOCKER_CERT_PATH,则将使用环境变量 DOCKER_CERT_PATH 指定的目录中的 cert.pem 文件。

client_key

别名:tls_client_key, key_path

路径

客户端 TLS 密钥文件的路径。

如果任务中未指定此值,并且环境变量 DOCKER_CERT_PATH 已设置,则将使用环境变量 DOCKER_CERT_PATH 指定目录中的 key.pem 文件。

docker_cli

路径

Docker CLI 的路径。如果未提供,将在 PATH 中搜索 Docker CLI。

docker_host

别名:docker_url

字符串

用于连接到 Docker API 的 URL 或 Unix 套接字路径。要连接到远程主机,请提供 TCP 连接字符串。例如,tcp://192.0.2.23:2376。如果使用 TLS 加密连接,模块将自动将连接 URL 中的 tcp 替换为 https

如果任务中未指定此值,则将使用环境变量 DOCKER_HOST 的值。如果未设置环境变量,则将使用默认值。

cli_context 互斥。如果既未提供 docker_host 也未提供 cli_context,则使用值 unix:///var/run/docker.sock

dockerfile

字符串

构建镜像时,提供 Dockerfile 的替代名称。

这也可以包含相对路径(相对于 path)。

etc_hosts

字典

要添加到构建容器的 /etc/hosts 中的额外主机,作为主机名到 IP 地址的映射。

除了 IP 地址外,还可以使用特殊值 host-gateway,它解析为主机的网关 IP,并允许构建的容器连接到主机上运行的服务。

labels

字典

键值对字典。

name

字符串 / 必需

镜像名称。名称格式之一:namerepository/nameregistry_server:port/name。推送或拉取镜像时,可以通过附加 :tag_name 来包含标签(可选)。

请注意,不能使用镜像 ID(哈希值)和包含摘要的名称。

network

字符串

用于 RUN 构建指令的网络。

nocache

布尔值

构建镜像时不使用缓存。

选项

  • false ← (默认)

  • true

outputs

列表 / 元素=字典

community.docker 3.10.0 中添加

输出目标。

您可以提供导出程序列表,以便将构建的镜像导出到各种位置。请注意,所使用的构建驱动程序可能不支持所有导出程序。

请注意,根据此选项的使用方式,可能不会创建名称为 name 且标签为 tag 的镜像,这可能会导致此模块提供的基本幂等性不起作用。

为此选项提供空列表等效于根本不指定它。默认行为是单个条目,其中 outputs[].type=image

context

字符串

要导入结果的 Docker 上下文的名称。

对于 outputs[].type=docker 可选。

dest

路径

目标路径。

对于 outputs[].type=localoutputs[].type=taroutputs[].type=oci 必需。

对于 outputs[].type=docker 可选。

name

字符串

在其中存储镜像的名称。

如果未提供,则将使用 nametag

对于 outputs[].type=image 可选。

push

布尔值

是否将构建的镜像推送到注册表。

仅用于 outputs[].type=image

选项

  • false ← (默认)

  • true

type

字符串 / 必需

要使用的导出程序类型。

选项

  • "docker":此导出类型将单平台结果镜像作为 Docker 镜像规范 tarball 写入客户端。此导出程序创建的 tarball 也与 OCI 兼容。

    可以在 outputs[].dest 中提供目标。如果未指定,则 tar 将自动加载到本地镜像存储区。

    可以在 outputs[].context 中提供要导入结果的 Docker 上下文。

  • "image":此导出程序将构建结果写入镜像或清单列表。使用此驱动程序时,镜像将显示在 docker images 中。

    可以在 outputs[].name 中提供镜像名称。如果未提供,则将使用 nametag

    可以选择通过设置 outputs[].push=true 将镜像自动推送到注册表。

  • "local":此导出类型将所有结果文件写入客户端的目录。新文件将由当前用户拥有。在多平台构建中,所有结果都将按其平台放在子目录中。

    必须在 outputs[].dest 中提供目标。

  • "oci":此导出类型将结果镜像或清单列表作为 OCI 镜像布局 tarball 写入客户端。

    必须在 outputs[].dest 中提供目标。

  • "tar":此导出类型将所有结果文件导出为客户端上的单个 tarball。在多平台构建中,所有结果都将按其平台放在子目录中。

    必须在 outputs[].dest 中提供目标。

路径

路径 / 必需

构建环境的路径。

platform

列表 / 元素=字符串

格式为 os[/arch[/variant]] 的平台。

从 community.docker 3.10.0 开始,这可以是平台列表,而不仅仅是单个平台。

pull

布尔值

构建镜像时,下载 Dockerfile 中 FROM 镜像的任何更新。

选项

  • false ← (默认)

  • true

rebuild

字符串

定义如果要构建的镜像(如 nametag 中指定)已存在,则模块的行为。

选项

  • "never" ← (默认)

  • "always"

secrets

列表 / 元素=字典

community.docker 3.10.0 中添加

要公开给构建的密钥。

env

字符串

密钥的环境值。

仅支持并要求 secrets[].type=env

id

字符串 / 必需

密钥标识符。

密钥将在容器中作为文件在 /run/secrets/<id> 下可用。

src

路径

密钥的源路径。

仅支持并要求 secrets[].type=file

type

字符串 / 必需

密钥的类型。

选项

  • "env":从目标上的环境变量读取密钥。

    必须在 secrets[].env 中命名环境变量。

    请注意,这需要 Buildkit 插件的版本为 0.6.0 或更高版本。

  • "file":从目标上的文件读取密钥。

    必须在 secrets[].src 中指定文件。

  • "value":从给定值 secrets[].value 提供密钥。

    注意密钥将作为环境变量传递给 docker compose。如果您认为此方法不够安全,请使用其他传输方式。

    请注意,这需要 Buildkit 插件的版本为 0.6.0 或更高版本。

value

字符串

密钥的值。

注意密钥将作为环境变量传递给 docker compose。如果您认为此方法不够安全,请使用其他传输方式。

仅当 secrets[].type=value 时才支持并需要此参数。

shm_size

字符串

/dev/shm 的大小,格式为 <number>[<unit>]。数字为正整数。单位可以是 B(字节)、K(Kibibyte,1024B)、M(Mebibyte)、G(Gibibyte)、T(Tebibyte)或 P(Pebibyte)。

省略单位默认为字节。如果完全省略大小,Docker 守护程序将使用 64M

tag

字符串

要标记的镜像名称 name 的标签。

如果 name 的格式为 name:tag,则来自 name 的标签值将优先。

默认值: "latest"

target

字符串

构建镜像时,指定中间构建阶段的名称作为最终镜像的最终阶段。

tls

布尔值

使用 TLS 保护与 API 的连接,无需验证 Docker 主机服务器的真实性。请注意,如果 validate_certs 也设置为 true,则它将优先。

如果任务中未指定此值,则将改用环境变量 DOCKER_TLS 的值。如果未设置环境变量,则将使用默认值。

选项

  • false ← (默认)

  • true

tls_hostname

字符串

验证 Docker 主机服务器的真实性时,提供服务器的预期名称。

如果任务中未指定此值,则将改用环境变量 DOCKER_TLS_HOSTNAME 的值。如果未设置环境变量,则将使用默认值。

validate_certs

别名:tls_verify

布尔值

使用 TLS 保护与 API 的连接并验证 Docker 主机服务器的真实性。

如果任务中未指定此值,则将改用环境变量 DOCKER_TLS_VERIFY 的值。如果未设置环境变量,则将使用默认值。

选项

  • false ← (默认)

  • true

属性

属性

支持

描述

action_group

操作组: community.docker.dockerdocker

module_defaults 中使用 group/dockergroup/community.docker.docker 为此模块设置默认值。

check_mode

支持:完全支持

可以在 check_mode 下运行,并在不修改目标的情况下返回更改状态预测。

diff_mode

支持:不支持

处于差异模式时,将返回有关已更改内容(或可能需要在 check_mode 中更改的内容)的详细信息。

备注

注意

另请参阅

另请参阅

community.docker.docker_image_push

将 Docker 镜像推送到注册表。

community.docker.docker_image_tag

使用新的名称和/或标签标记 Docker 镜像。

示例

- name: Build Python 3.12 image
  community.docker.docker_image_build:
    name: localhost/python/3.12:latest
    path: /home/user/images/python
    dockerfile: Dockerfile-3.12

- name: Build multi-platform image
  community.docker.docker_image_build:
    name: multi-platform-image
    tag: "1.5.2"
    path: /home/user/images/multi-platform
    platform:
      - linux/amd64
      - linux/arm64/v8

返回值

常见返回值已在 此处 记录,以下是此模块特有的字段

描述

image

字典

受影响镜像的镜像检查结果。

返回:成功

示例: {}

作者

  • Felix Fontein (@felixfontein)