远程驱动程序
Buildx 远程驱动程序允许更复杂的自定义构建工作负载, 允许您连接到外部管理的 BuildKit 实例。这很有用 对于需要手动管理 BuildKit 守护进程的场景,或者 BuildKit 守护程序从另一个源公开。
概要
$ docker buildx create \
--name remote \
--driver remote \
tcp://localhost:1234
下表描述了您可以
传给 :--driver-opt
参数 | 类型 | 违约 | 描述 |
---|---|---|---|
key | 字符串 | 设置 TLS 客户端密钥。 | |
cert | 字符串 | 要呈现给 的 TLS 客户端证书的绝对路径。buildkitd | |
cacert | 字符串 | 用于验证的 TLS 证书颁发机构的绝对路径。 | |
servername | 字符串 | 终端节点主机名。 | 请求中使用的 TLS 服务器名称。 |
default-load | 布尔 | false | 自动将镜像加载到 Docker Engine 镜像存储。 |
示例:基于 Unix 套接字的远程 BuildKit
本指南将介绍如何使用 BuildKit 守护进程创建设置,该守护进程监听 Unix 套接字,并让 Buildx 通过它进行连接。
确保已安装 BuildKit。
例如,您可以通过以下方式启动 buildkitd 实例:
$ sudo ./buildkitd --group $(id -gn) --addr unix://$HOME/buildkitd.sock
检查是否有可以连接的 Unix 套接字。
$ ls -lh /home/user/buildkitd.sock srw-rw---- 1 root user 0 May 5 11:04 /home/user/buildkitd.sock
使用远程驱动程序将 Buildx 连接到它:
$ docker buildx create \ --name remote-unix \ --driver remote \ unix://$HOME/buildkitd.sock
列出具有 的可用生成器。然后,您应该看到其中的:
docker buildx ls
remote-unix
$ docker buildx ls NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS remote-unix remote remote-unix0 unix:///home/.../buildkitd.sock running linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386 default * docker default default running linux/amd64, linux/386
您可以使用 切换到此新生成器作为默认生成器,也可以使用 :docker buildx use remote-unix
--builder
$ docker buildx build --builder=remote-unix -t test --load .
请记住,如果要加载构建,则需要使用 flag
result 添加到 Docker 守护程序中。--load
示例:Docker 容器中的远程 BuildKit
本指南将向您展示如何通过手动启动 BuildKit Docker 容器并连接到它来创建类似于驱动程序的设置
使用 Buildx 远程驱动程序。此过程将手动创建容器
并通过其裸露的端口访问它。(最好只使用通过 Docker 守护程序连接到 BuildKit 的驱动程序,
但这只是为了说明目的。docker-container
docker-container
为 BuildKit 生成证书。
您可以使用此烘焙定义作为起点:
SAN="localhost 127.0.0.1" docker buildx bake "https://github.com/moby/buildkit.git#master:examples/create-certs"
请注意,虽然可以在 TCP 上公开 BuildKit,而无需使用 TLS,不建议这样做。这样做允许对 BuildKit 进行任意访问 没有凭据。
使用 中生成的证书,启动容器:
.certs/
$ docker run -d --rm \ --name=remote-buildkitd \ --privileged \ -p 1234:1234 \ -v $PWD/.certs:/etc/buildkit/certs \ moby/buildkit:latest \ --addr tcp://0.0.0.0:1234 \ --tlscacert /etc/buildkit/certs/daemon/ca.pem \ --tlscert /etc/buildkit/certs/daemon/cert.pem \ --tlskey /etc/buildkit/certs/daemon/key.pem
此命令启动 BuildKit 容器并公开守护进程的端口 1234 到 localhost 中。
使用 Buildx 连接到这个正在运行的容器:
$ docker buildx create \ --name remote-container \ --driver remote \ --driver-opt cacert=${PWD}/.certs/client/ca.pem,cert=${PWD}/.certs/client/cert.pem,key=${PWD}/.certs/client/key.pem,servername=<TLS_SERVER_NAME> \ tcp://localhost:1234
或者,使用 URL 方案连接到 BuildKit 容器的 BuildKit 容器:
docker-container://
$ docker buildx create \ --name remote-container \ --driver remote \ docker-container://remote-container
示例:Kubernetes 中的远程 BuildKit
本指南将向您展示如何通过手动创建 BuildKit 来创建类似于驱动程序的设置。虽然驱动程序将在后台执行此操作,但有时可能需要扩展
BuildKit 的 BuildKit 中。此外,从 Kubernetes 内部执行构建时
pods,则需要从每个 pod 中重新创建 Buildx 构建器,或者
在它们之间复制。kubernetes
Deployment
kubernetes
按照此处的说明创建 的 Kubernetes 部署。
buildkitd
按照指南,为 BuildKit 守护进程和客户端创建证书 使用 create-certs.sh, 并使用连接到 他们。
假设该服务名为 ,在 Buildx,确保列出的证书文件存在:
buildkitd
$ docker buildx create \ --name remote-kubernetes \ --driver remote \ --driver-opt cacert=${PWD}/.certs/client/ca.pem,cert=${PWD}/.certs/client/cert.pem,key=${PWD}/.certs/client/key.pem \ tcp://buildkitd.default.svc:1234
请注意,这仅适用于集群内部,因为 BuildKit
Setup Guide 仅创建一个服务。要远程访问构建器,
您可以设置和使用 Ingress,这不在本指南的讨论范围之内。ClusterIP
在 Kubernetes 中调试远程构建器
如果您在访问 Kubernetes 中部署的远程构建器时遇到问题,您可以
可以使用 URL 方案直接连接到 BuildKit Pod
通过 Kubernetes API 进行。请注意,此方法仅连接到单个 Pod
在部署中。kube-pod://
$ kubectl get pods --selector=app=buildkitd -o json | jq -r '.items[].metadata.name'
buildkitd-XXXXXXXXXX-xxxxx
$ docker buildx create \
--name remote-container \
--driver remote \
kube-pod://buildkitd-XXXXXXXXXX-xxxxx
或者,使用 以下端口转发机制:kubectl
$ kubectl port-forward svc/buildkitd 1234:1234
然后,您可以将远程驱动程序指向 。tcp://localhost:1234