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