1. docker buildx create

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

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

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

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

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

1.1. 帮助

# 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

1.2. 选项

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

1.3. 示例

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

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

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

$ docker buildx create mycontext1
eager_beaver

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

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

--buildkitd-flags FLAGS

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

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

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

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

--config FILE

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

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

1.3.4. 设置 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 需要指定。

1.3.5. 配置驱动的参数选项 (--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

1.3.6. 从 builder 移除一个构建 node 节点 (--leave)

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

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

1.3.7. 指定明确的 builder 实例 (--name)

--name NAME

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

1.3.8. 指定明确的 node 名称 (--node)

--node NODE

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

1.3.9. 设置 node 支持的平台 (--platform)

--platform PLATFORMS

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

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

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

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

1.3.10. 自动切换到新 builder 实例 (--use)

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

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

2. 参考

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2023-05-22 14:19:45

results matching ""

    No results matching ""