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
 ...

传递要构建的目标的名称,以仅构建特定的目标。以下示例将构建文件中定义的backenddatabase目标,并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"]
}

有效目标字段的完整列表:

argscache-fromcache-tocontextdockerfileinheritslabelsno-cacheoutputplatformpullsecretssshtagstarget

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版本信息