docker buildx create

创建一个新的 builder 构建实例。

使用当前 docker 上下文或配置 endpoint 来创建一个信息 builder 实例。

docker 上下文是指 docker context ls 查看的内容,endpoint 是指 docker 的 socket 的地址(如:DOCKER_HOST 的值)。

默认情况下,当前的 Docker 配置会用于上下文/endpoint 的值。

构建器实例是可以调用独立环境进行构建。所有 Docker 上下文会也可以访问默认的构建器实例。

帮助

# docker buildx create --help

Usage:  docker buildx create [OPTIONS] [CONTEXT|ENDPOINT]

Create a new builder instance

Options:
      --append                   Append a node to builder instead of changing it
      --builder string           Override the configured builder instance
      --buildkitd-flags string   Flags for buildkitd daemon
      --config string            BuildKit config file
      --driver string            Driver to use (available: [docker docker-container kubernetes])
      --driver-opt stringArray   Options for the driver
      --leave                    Remove a node from builder instead of changing it
      --name string              Builder instance name
      --node string              Create/modify node with given name
      --platform stringArray     Fixed platforms for current node
      --use                      Set the current builder instance

选项

名称 类型 默认 描述
--append 追加一个构建节点到 builder 实例中
--bootstrap builder 实例创建后进行初始化启动
--buildkitd-flags string 配置 buildkitd 进程的参数
--config string 指定 BuildKit 配置文件
--driver string 指定驱动 (支持: docker, docker-container, kubernetes)
--driver-opt stringArray 驱动选项
--leave 从 builder 实例中移除一个构建节点
--name string 指定 Builder 实例的名称
--node string 创建或修改一个构建节点
--platform stringArray 强制指定节点的平台信息
--use 创建成功后,自动切换到该 builder 实例

示例

追加一个构建节点到 builder 实例中 (–append)

--append 选项可以给一个已经存在的 --name 指定的 builder 实例添加新的 node 节点。

Buildx 将根据其支持的平台为构建过程选择合适的节点。

$ docker buildx create mycontext1
eager_beaver

$ docker buildx create --name eager_beaver --append mycontext2
eager_beaver

配置 buildkit 进程的参数标记 (–buildkitd-flags)

--buildkitd-flags FLAGS

当前 buildkitd 进程启动时会添加这些指定的标记。

这里配置的优先级会比 --config 中指定的高,可以通过 buildkitd --help 查看所有可用的标记选项:

--buildkitd-flags '--debug --debugaddr 0.0.0.0:6666'

指定一个配置文件来启动 buildkitd daemon (–config)

--config FILE

指定一个配置文件来启动 buildkitd 进程,这个配置文件中的配置可以被 --buildkitd-flags 覆盖。参考配置文件.

注意,如果创建的是 docker-container 驱动的构建器,并在 buildkitd.toml 配置中指定了 registry 的证书,这个文件会被复制到容器中 /etc/buildkit/certs 目录并生效。

设置 builder 使用的驱动 (–driver)

--driver DRIVER

设置 builder 使用的驱动。有三个可用的驱动程序,每个都自己的特异性。

docker 驱动

使用内置在 Docker 守护进程中的构建器。使用这个驱动器时,buildx build 执行时的 --load 可以不用指定。

然而,构建多平台镜像或导出缓存目前该驱动不支持。

docker-container 驱动

使用 BuildKit 容器,该容器将通过 docker 生成。

构建多平台镜像或导出缓存目前该驱动都支持。

docker 驱动不同,docker-container 驱动不会自动将构建的镜像在 docker images 视图中显示。并且 build --load 需要指定。

kubernetes 驱动

该驱动使用 kubernetes 的 pod 来运行 BuiltKit ,使用 BuildKit 容器来构建你的镜像。

docker 驱动不同,docker-container 驱动不会自动将构建的镜像在 docker images 视图中显示。并且 build --load 需要指定。

配置驱动的参数选项 (–driver-opt)

--driver-opt OPTIONS

传递额外的驱动选项。每个驱动的详细信息:

  • docker - 不支持驱动参数配置
  • docker-container
    • image=IMAGE - 设置用于运行 buildkit 的容器镜像
    • network=NETMODE - 设置运行 buildkit 容器的网络模式
    • cgroup-parent=CGROUP - 如果 docker 使用的是 “cgroupfs” 驱动,设置 buildkit 容器的 父 cgroup。默认 /docker/buildx
  • kubernetes
    • image=IMAGE - 设置用于运行 buildkit 的容器镜像
    • namespace=NS - 设置 Kubernetes namespace. 默认是 default namespace.
    • replicas=N - 设置 Pod 副本数量. 默认是 1.
    • requests.cpu - 设置每个 buildkit POD 运行依赖的 CPU。 例如: requests.cpu=100m, requests.cpu=2
    • requests.memory - 设置 buildkit POD 运行依赖的内存。例如: requests.memory=500Mi, requests.memory=4G
    • limits.cpu - 设置每个 buildkit POD 运行的 CPU 上限。例如: limits.cpu=100m, limits.cpu=2
    • limits.memory -设置每个 buildkit POD 运行的内存上限。例如: limits.memory=500Mi, limits.memory=4G
    • nodeselector="label1=value1,label2=value2" - 设置 Pod 调度的 nodeSelector 配置。没有默认,即默认由 kubernetes 自动调度。例如: nodeselector=kubernetes.io/arch=arm64
    • tolerations="key=foo,value=bar;key=foo2,operator=exists;key=foo3,effect=NoSchedule" - 设置 Pod 调度的tolerations 容忍配置。 建议和 kubernetes 配置的污点保持一致。多个键值对使用 , 分割, 多个容忍使用; 分割。没有默认值。 例如: tolerations=operator=exists
    • rootless=(true|false) - 运行容器使用非 root 用户, 没有 securityContext.privileged 权限。 需要 Kubernetes 大于等于 1.19 版本。 使用 ubuntu 内核的建议d。没有默认值。
    • loadbalance=(sticky|random) - 负载均衡策略。 如果设置为 “sticky”, 使用上下文路径的哈希值选择pod。默认是 “sticky”。
    • qemu.install=(true|false) - 安装 QEMU 仿真以支持多平台构建。
    • qemu.image=IMAGE - 设置 QEMU 仿真的镜像. 默认: tonistiigi/binfmt:latest

从 builder 移除一个构建 node 节点 (–leave)

--leave 选项会将一个构建 node 节点从一个 builder 中移除,者需要通过 --name 来指定具体的 builder 实例,通过 --node 来指定具体要移除的 node 节点。

$ docker buildx create --name mybuilder --node mybuilder0 --leave

指定明确的 builder 实例 (–name)

--name NAME

--name 标记可以指定明确的 builder 实例来进行创建或修改,如果没有指定会随机创建一个名称。

指定明确的 node 名称 (–node)

--node NODE

--node 选项用来指定明确的 node 节点来进行创建或修改。如果没有指定,it is the name of the builder it belongs to, with an index number suffix.

设置 node 支持的平台 (–platform)

--platform PLATFORMS

--platform 设置 node 支持的平台。

它需要一个以逗号分隔的 OS/architecture/variant 形式的平台列表。

该节点还将自动检测其支持的平台,但手动值优先于检测到的平台,当多个节点支持为同一平台构建时,可以使用手动值。

$ docker buildx create --platform linux/amd64
$ docker buildx create --platform linux/arm64,linux/arm/v8

自动切换到新 builder 实例 (–use)

当创建新 builder 实例时指定 --use 选项,就会在创建完成后构建上下文会自动切换到该 builder。

等价于运行命令: docker buildx use $(docker buildx create ...)

参考