docker buildx bake
| 描述 | 从文件构建 |
|---|---|
| 用法 | docker buildx bake [选项] [目标...] |
| 别名 | docker buildx f |
描述
Bake 是一个高级构建命令。每个指定的目标都将作为构建的一部分并行运行。
请阅读 使用 Bake 的高级构建选项 指南,了解如何编写 bake 文件。
注意未来,如果需要,
buildx bake命令可能会收到向后不兼容的功能。我们正在寻求关于改进命令和进一步扩展功能的反馈。
选项
| 选项 | 默认值 | 描述 |
|---|---|---|
--allow | 允许构建访问指定的资源 | |
--call | build | 设置评估构建的方法(check,outline,targets) |
--check | --call=check 的简写 | |
-f, --file | 构建定义文件 | |
--list | 列出目标或变量 | |
--load | --set=*.output=type=docker 的简写 | |
--metadata-file | 将构建结果元数据写入文件 | |
--no-cache | 构建镜像时不使用缓存 | |
--print | 打印选项而不构建 | |
--progress | auto | 设置进度输出类型(auto,quiet,plain,tty,rawjson)。使用 plain 显示容器输出 |
--provenance | --set=*.attest=type=provenance 的简写 | |
--pull | 始终尝试拉取所有引用的镜像 | |
--push | --set=*.output=type=registry 的简写 | |
--sbom | --set=*.attest=type=sbom 的简写 | |
--set | 覆盖目标值(例如,targetpattern.key=value) |
示例
允许额外的特权授权 (--allow)
--allow=ENTITLEMENT[=VALUE]授权旨在提供对特权操作的受控访问。默认情况下,Buildx 和 BuildKit 在受限权限下运行,以保护用户及其系统免受意外的副作用或安全风险。--allow 标志明确授予对额外授权的访问权限,明确表示构建或烘焙操作何时需要提升的权限。
除了 BuildKit 的 network.host 和 security.insecure 授权(请参阅 docker buildx build --allow),Bake 还支持文件系统授权,可以对文件系统访问进行精细控制。当处理需要访问默认工作目录之外的文件的构建时,这些特别有用。
Bake 支持以下文件系统授权
--allow fs=<path|*>- 授予对工作目录之外的文件的读写访问权限。--allow fs.read=<path|*>- 授予对工作目录之外的文件的只读访问权限。--allow fs.write=<path|*>- 授予对工作目录之外的文件的写访问权限。
fs 授权接受文件系统上目录的路径值(相对或绝对)。或者,您可以传递通配符(*)以允许 Bake 访问整个文件系统。
示例:fs.read
给定以下 Bake 配置,Bake 需要访问相对于 Bake 文件的父目录。
target "app" {
context = "../src"
}假设 docker buildx bake app 与 docker-bake.hcl 文件在同一目录中执行,您需要明确允许 Bake 从 ../src 目录读取。在这种情况下,以下所有调用都有效
$ docker buildx bake --allow fs.read=* app
$ docker buildx bake --allow fs.read=../src app
$ docker buildx bake --allow fs=* app
示例:fs.write
以下 docker-bake.hcl 文件需要对 /tmp 目录的写访问权限。
target "app" {
output = "/tmp"
}假设 docker buildx bake app 在 /tmp 目录之外执行,您需要允许 fs.write 授权,可以通过指定路径或使用通配符
$ docker buildx bake --allow fs=/tmp app
$ docker buildx bake --allow fs.write=/tmp app
$ docker buildx bake --allow fs.write=* app
覆盖已配置的构建器实例(--builder)
调用前端方法 (--call)
与 build --call 相同。
调用:检查 (--check)
与 build --check 相同。
指定构建定义文件 (-f, --file)
使用 -f / --file 选项指定要使用的构建定义文件。该文件可以是 HCL、JSON 或 Compose 文件。如果指定了多个文件,则所有文件都将被读取,并且构建配置将合并。
或者,可以使用环境变量 BUILDX_BAKE_FILE 来指定要使用的构建定义。这与 -f / --file 是互斥的;如果两者都指定,则忽略环境变量。可以通过使用系统的路径分隔符(Windows 上通常为 ;,其他地方为 :)来分隔多个定义,但可以使用 BUILDX_BAKE_PATH_SEPARATOR 进行更改。
您可以传递要构建的目标名称,以仅构建特定目标。以下示例构建 docker-bake.dev.hcl 文件中定义的 db 和 webapp-release 目标
# docker-bake.dev.hcl
group "default" {
targets = ["db", "webapp-dev"]
}
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp"]
}
target "webapp-release" {
inherits = ["webapp-dev"]
platforms = ["linux/amd64", "linux/arm64"]
}
target "db" {
dockerfile = "Dockerfile.db"
tags = ["docker.io/username/db"]
}$ docker buildx bake -f docker-bake.dev.hcl db webapp-release
有关更多详细信息,请参阅 Bake 文件参考。
列出目标和变量 (--list)
--list 标志显示 Bake 配置中所有可用的目标或变量,以及描述(如果在 Bake 文件中使用 description 属性设置)。
列出所有目标
$ docker buildx bake --list=targets
TARGET DESCRIPTION
binaries
default binaries
update-docs
validate
validate-golangci Validate .golangci.yml schema (does not run Go linter)
列出变量
$ docker buildx bake --list=variables
VARIABLE TYPE VALUE DESCRIPTION
REGISTRY string docker.io/username Registry and namespace
IMAGE_NAME string my-app Image name
GO_VERSION <null>
DEBUG bool false Add debug symbols
变量类型将在 Bake 文件中使用 type 属性设置时显示。
默认情况下,docker buildx bake --list 的输出以表格形式呈现。或者,您可以使用长格式 CSV 语法并指定 format 属性以 JSON 格式输出列表。
$ docker buildx bake --list=type=targets,format=json
将构建结果元数据写入文件 (--metadata-file)
类似于 buildx build --metadata-file,但为每个目标写入结果映射,例如
# docker-bake.hcl
group "default" {
targets = ["db", "webapp-dev"]
}
target "db" {
dockerfile = "Dockerfile.db"
tags = ["docker.io/username/db"]
}
target "webapp-dev" {
dockerfile = "Dockerfile.webapp"
tags = ["docker.io/username/webapp"]
}$ docker buildx bake --load --metadata-file metadata.json .
$ cat metadata.json
{
"buildx.build.warnings": {},
"db": {
"buildx.build.provenance": {},
"buildx.build.ref": "mybuilder/mybuilder0/0fjb6ubs52xx3vygf6fgdl611",
"containerimage.config.digest": "sha256:2937f66a9722f7f4a2df583de2f8cb97fc9196059a410e7f00072fc918930e66",
"containerimage.descriptor": {
"annotations": {
"config.digest": "sha256:2937f66a9722f7f4a2df583de2f8cb97fc9196059a410e7f00072fc918930e66",
"org.opencontainers.image.created": "2022-02-08T21:28:03Z"
},
"digest": "sha256:19ffeab6f8bc9293ac2c3fdf94ebe28396254c993aea0b5a542cfb02e0883fa3",
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"size": 506
},
"containerimage.digest": "sha256:19ffeab6f8bc9293ac2c3fdf94ebe28396254c993aea0b5a542cfb02e0883fa3"
},
"webapp-dev": {
"buildx.build.provenance": {},
"buildx.build.ref": "mybuilder/mybuilder0/kamngmcgyzebqxwu98b4lfv3n",
"containerimage.config.digest": "sha256:9651cc2b3c508f697c9c43b67b64c8359c2865c019e680aac1c11f4b875b67e0",
"containerimage.descriptor": {
"annotations": {
"config.digest": "sha256:9651cc2b3c508f697c9c43b67b64c8359c2865c019e680aac1c11f4b875b67e0",
"org.opencontainers.image.created": "2022-02-08T21:28:15Z"
},
"digest": "sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74",
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"size": 506
},
"containerimage.digest": "sha256:6d9ac9237a84afe1516540f40a0fafdc86859b2141954b4d643af7066d598b74"
}
}注意构建记录 出处 (
buildx.build.provenance) 默认包含最少出处。设置BUILDX_METADATA_PROVENANCE环境变量以自定义此行为
min设置最小出处(默认)。max设置完整出处。disabled、false或0不设置任何出处。
注意默认情况下不包含构建警告 (
buildx.build.warnings)。将BUILDX_METADATA_WARNINGS环境变量设置为1或true以包含它们。
构建镜像时不要使用缓存 (--no-cache)
与 build --no-cache 相同。构建镜像时不使用缓存。
打印选项而不构建 (--print)
以 JSON 格式打印所需构建目标的最终选项,而不启动构建。
$ docker buildx bake -f docker-bake.hcl --print db
{
"group": {
"default": {
"targets": [
"db"
]
}
},
"target": {
"db": {
"context": "./",
"dockerfile": "Dockerfile",
"tags": [
"docker.io/tiborvass/db"
]
}
}
}
设置进度输出类型(--progress)
与 build --progress 相同。
创建出处证明 (--provenance)
与 build --provenance 相同。
始终尝试拉取更新版本的镜像 (--pull)
与 build --pull 相同。
创建 SBOM 证明 (--sbom)
与 build --sbom 相同。
从命令行覆盖目标配置 (--set)
--set targetpattern.key[.subkey]=value从命令行覆盖目标配置。模式匹配语法在 https://golang.ac.cn/pkg/path/#Match 中定义。
$ docker buildx bake --set target.args.mybuildarg=value
$ docker buildx bake --set target.platform=linux/arm64
$ docker buildx bake --set foo*.args.mybuildarg=value # overrides build arg for all targets starting with 'foo'
$ docker buildx bake --set *.platform=linux/arm64 # overrides platform for all targets
$ docker buildx bake --set foo*.no-cache # bypass caching only for targets starting with 'foo'
$ docker buildx bake --set target.platform+=linux/arm64 # appends 'linux/arm64' to the platform list
您可以覆盖以下字段
annotationsattestargscache-fromcache-tocallcontextdockerfileentitlementsextra-hostslabelsloadno-cacheno-cache-filteroutputplatformpullpushsecretssshtagstarget
您可以使用 += 运算符追加以下字段
annotations¹attest¹cache-fromcache-toentitlements¹no-cache-filteroutputplatformsecretssshtags
注意¹ 这些字段默认已追加。