docker buildx烘烤
描述
从文件构建
用法
$ docker buildx bake [OPTIONS] [TARGET...]
扩展说明
烘焙是高级构建命令。每个指定的目标将作为构建的一部分并行运行。
有关此命令的示例用法,请参阅下面的示例部分。
选项
名称,简写 | 默认 | 描述 |
--file , -f |
构建定义文件 | |
--load |
--set = *。output = type = docker的简写 | |
--no-cache |
构建映像时不要使用缓存 | |
--print |
打印选项而无需构建 | |
--progress |
auto |
设置进度输出的类型(自动,普通,tty)。使用普通显示容器输出 |
--pull |
始终尝试提取图像的较新版本 | |
--push |
--set = *。output = type = registry的简写 | |
--set |
覆盖目标值(例如:targetpattern.key = value) | |
--builder |
覆盖已配置的构建器实例 |
例子
指定构建定义文件(-f,-file)
默认情况下,buildx bake
在当前目录中查找构建定义文件,将分析以下内容:
docker-compose.yml
docker-compose.yaml
docker-bake.json
docker-bake.override.json
docker-bake.hcl
docker-bake.override.hcl
使用-f
/--file
选项指定要使用的构建定义文件。该文件可以是Docker Compose,JSON或HCL文件。如果指定了多个文件,则将全部读取,并合并配置。
以下示例使用名为docker-compose.dev.yaml
构建定义文件的Docker Compose文件,并在该文件中构建所有目标:
$ docker buildx bake -f docker-compose.dev.yaml
[+] Building 66.3s (30/30) FINISHED
=> [frontend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 36B 0.0s
=> [backend internal] load build definition from Dockerfile 0.2s
=> => transferring dockerfile: 3.73kB 0.0s
=> [database internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 5.77kB 0.0s
...
传递要构建的目标的名称,以仅构建特定的目标。以下示例将构建文件中定义的backend
和database
目标,并docker-compose.dev.yaml
跳过frontend
目标的构建:
$ docker buildx bake -f docker-compose.dev.yaml backend database
[+] Building 2.4s (13/13) FINISHED
=> [backend internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 81B 0.0s
=> [database internal] load build definition from Dockerfile 0.2s
=> => transferring dockerfile: 36B 0.0s
=> [backend internal] load .dockerignore 0.3s
...
构建映像时不要使用缓存(--no-cache)
与相同build --no-cache
。构建映像时不要使用缓存。
在不构建的情况下打印选项(--print)
以JSON格式打印想要构建的目标的结果选项,而无需开始构建。
$ docker buildx bake -f docker-bake.hcl --print db
{
"target": {
"db": {
"context": "./",
"dockerfile": "Dockerfile",
"tags": [
"docker.io/tiborvass/db"
]
}
}
}
设置进度输出的类型(--progress)
与相同build --progress
。设置进度输出的类型(自动,普通,tty)。使用无格式显示容器输出(默认为“自动”)。
以下示例plain
在构建过程中使用输出:
$ docker buildx bake --progress=plain
#2 [backend internal] load build definition from Dockerfile.test
#2 sha256:de70cb0bb6ed8044f7b9b1b53b67f624e2ccfb93d96bb48b70c1fba562489618
#2 ...
#1 [database internal] load build definition from Dockerfile.test
#1 sha256:453cb50abd941762900a1212657a35fc4aad107f5d180b0ee9d93d6b74481bce
#1 transferring dockerfile: 36B done
#1 DONE 0.1s
...
始终尝试拉取图像的较新版本(--pull)
与相同build --pull
。
从命令行覆盖目标配置(--set)
--set targetpattern.key[.subkey]=value
从命令行覆盖目标配置。模式匹配语法在https://golang.org/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'
可覆盖字段的完整列表:args,从缓存,到缓存,上下文,dockerfile,标签,无缓存,输出,平台,pull,秘密,ssh,标签,目标
档案定义
除撰写文件外,bake还支持JSON和等效的HCL文件格式,用于定义构建组和目标。
目标反映了单个docker构建调用,具有与您将为其指定的选项相同的选项docker build
。一组是目标的分组。
多个文件可以包含相同的目标,并且最终的构建选项将通过合并在一起来确定。
对于撰写文件,每个服务都对应一个目标。
一个组可以使用该targets
选项指定其目标列表。目标可以通过将inherits
选项设置为要继承的目标或组的列表来继承构建选项。
注意:烘焙命令的设计正在进行中,用户体验可能会根据反馈而改变。
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"]
}
有效目标字段的完整列表:
args
,cache-from
,cache-to
,context
,dockerfile
,inherits
,labels
,
no-cache
,output
,platform
,pull
,secrets
,ssh
,tags
,target
HCL变量和函数
与Terraform提供定义变量的方式类似,HCL文件格式也支持变量块定义。这些可用于定义具有当前环境提供的值的变量,或者在未设置时使用默认值。
使用插值为git sha标记图像的示例:
$ cat <<'EOF' > docker-bake.hcl
variable "TAG" {
default = "latest"
}
group "default" {
targets = ["webapp"]
}
target "webapp" {
tags = ["docker.io/username/webapp:${TAG}"]
}
EOF
$ docker buildx bake --print webapp
{
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"tags": [
"docker.io/username/webapp:latest"
]
}
}
}
$ TAG=$(git rev-parse --short HEAD) docker buildx bake --print webapp
{
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"tags": [
"docker.io/username/webapp:985e9e9"
]
}
}
}
Go-cty 提供的一组通常有用的功能 可用于HCL文件。此外, 还支持用户定义的功能。
使用该add
函数的示例:
$ cat <<'EOF' > docker-bake.hcl
variable "TAG" {
default = "latest"
}
group "default" {
targets = ["webapp"]
}
target "webapp" {
args = {
buildno = "${add(123, 1)}"
}
}
EOF
$ docker buildx bake --print webapp
{
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"buildno": "124"
}
}
}
}
定义increment
函数的示例:
$ cat <<'EOF' > docker-bake.hcl
function "increment" {
params = [number]
result = number + 1
}
group "default" {
targets = ["webapp"]
}
target "webapp" {
args = {
buildno = "${increment(123)}"
}
}
EOF
$ docker buildx bake --print webapp
{
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"args": {
"buildno": "124"
}
}
}
}
仅在使用notequal
函数的变量不为空的情况下添加标签的示例:
$ cat <<'EOF' > docker-bake.hcl
variable "TAG" {default="" }
group "default" {
targets = [
"webapp",
]
}
target "webapp" {
context="."
dockerfile="Dockerfile"
tags = [
"my-image:latest",
notequal("",TAG) ? "my-image:${TAG}": "",
]
}
EOF
$ docker buildx bake --print webapp
{
"target": {
"webapp": {
"context": ".",
"dockerfile": "Dockerfile",
"tags": [
"my-image:latest"
]
}
}
}
上级命令
命令 | 描述 |
---|---|
docker buildx | 使用BuildKit进行构建 |
相关命令
命令 | 描述 |
docker buildx烘烤 | 从文件构建 |
docker buildx构建 | 开始构建 |
docker buildx创建 | 创建一个新的构建器实例 |
docker buildx du | 磁盘使用情况 |
docker buildx imagetools | 在注册表中处理图像的命令 |
docker buildx检查 | 检查当前的构建器实例 |
docker buildx ls | 列出构建器实例 |
docker buildx修剪 | 删除构建缓存 |
docker buildx rm | 删除构建器实例 |
docker buildx停止 | 停止构建器实例 |
docker buildx使用 | 设置当前的构建器实例 |
docker buildx版本 | 显示buildx版本信息 |