遠端驅動程式

Buildx 遠端驅動程式允許更複雜的客製化建置工作負載,允許您連線到外部管理的 BuildKit 執行個體。這適用於需要手動管理 BuildKit 精靈,或者 BuildKit 精靈從其他來源公開的情況。

概要

$ docker buildx create \
  --name remote \
  --driver remote \
  tcp://localhost:1234

下表描述您可以傳遞給 `--driver-opt` 的可用驅動程式特定選項

參數類型預設值說明
key字串設定 TLS 用戶端金鑰。
cert字串要呈現給 `buildkitd` 的 TLS 用戶端憑證的絕對路徑。
cacert字串用於驗證的 TLS 憑證授權單位的絕對路徑。
servername字串端點主機名稱。請求中使用的 TLS 伺服器名稱。
default-load布林值false自動將映像檔載入 Docker Engine 映像檔儲存區。

範例:透過 Unix 通訊端的遠端 BuildKit

本指南將說明如何使用在 Unix 通訊端上監聽的 BuildKit 精靈建立設定,並讓 Buildx 透過它進行連線。

  1. 確保已安裝 BuildKit

或者,請參閱此處請參閱此處

  • 使用遠端驅動程式將 Buildx 連線到它

  • 使用 `docker buildx ls` 列出可用的建置器。然後您應該會在其中看到 `remote-unix`

  • 您可以使用 `docker buildx use remote-unix` 將此新的建置器切換為預設值,或使用 `--builder` 針對每個建置指定它

    請記住,如果您想將建置結果載入 Docker 精靈,則需要使用 `--load` 旗標。

    範例:Docker 容器中的遠端 BuildKit

    本指南將說明如何透過手動啟動 BuildKit Docker 容器並使用 Buildx 遠端驅動程式連線到它來建立類似於 `docker-container` 驅動程式的設定。此程序將手動建立一個容器,並透過其公開的埠存取它。(您最好只使用透過 Docker 精靈連線到 BuildKit 的 `docker-container` 驅動程式,但這是為了說明目的。)

    1. 產生 BuildKit 的憑證。

      您可以使用此 bake 定義

      請注意,雖然可以在不使用 TLS 的情況下透過 TCP 公開 BuildKit,但不建議這樣做。這樣做允許在沒有憑證的情況下任意存取 BuildKit。

    2. 在 `.certs/` 中產生憑證後,啟動容器

      此指令會啟動 BuildKit 容器,並將精靈的埠 1234 公開給本機主機。

    3. 使用 Buildx 連線到此正在執行的容器

      或者,使用 `docker-container://` URL 結構來連線到 BuildKit 容器,而無需指定埠

    範例:Kubernetes 中的遠端 BuildKit

    本指南將示範如何透過手動建立 BuildKit Deployment 來建立類似於 kubernetes 驅動程式的設定。雖然 kubernetes 驅動程式會在幕後執行此操作,但有時可能需要手動調整 BuildKit 的規模。此外,當從 Kubernetes Pod 內部執行構建時,需要在每個 Pod 內重新建立 Buildx 建構器,或在 Pod 之間複製它。

    1. 根據這裡 的說明,建立 buildkitd 的 Kubernetes 部署。

      按照指南,使用 create-certs.sh

    請注意,這僅適用於叢集內部,因為 BuildKit 設定指南僅建立 ClusterIP 服務。要從遠端存取建構器,您可以設定和使用 Ingress,這不在本指南的範圍內。

    在 Kubernetes 中除錯遠端建置器

    如果您無法存取部署在 Kubernetes 中的遠端建構器,您可以使用 kube-pod:// URL 結構描述透過 Kubernetes API 直接連接到 BuildKit Pod。請注意,此方法僅連接到部署中的單個 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