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.ymldocker-compose.yamldocker-bake.jsondocker-bake.override.jsondocker-bake.hcldocker-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版本信息 |