建置驅動程式

建構驅動程式 (Build drivers) 是用於配置 BuildKit 後端執行方式與位置的設定。驅動程式設定可自訂,並允許對建構器進行細粒度的控制。Buildx 支援以下驅動程式:

  • docker:使用捆綁在 Docker 守護行程 (daemon) 中的 BuildKit 函式庫。
  • docker-container:使用 Docker 建立一個專用的 BuildKit 容器。
  • kubernetes:在 Kubernetes 叢集中建立 BuildKit Pod。
  • remote:直接連接到手動管理的 BuildKit 守護行程。

不同的驅動程式適用於不同的使用場景。預設的 docker 驅動程式優先考慮簡單性和易用性。它對快取和輸出格式等進階功能的支援有限,且無法進行自訂配置。其他驅動程式則提供了更大的彈性,能更好地處理進階場景。

下表概述了驅動程式之間的一些差異:

功能dockerdocker-containerkubernetesremote
自動載入映像檔
快取匯出 (Cache export)✓*
Tarball 輸出
多架構映像檔 (Multi-arch images)
BuildKit 組態外部管理

* docker 驅動程式並不支援所有的快取匯出選項。詳情請參閱快取儲存後端

載入至本機映像檔儲存庫

與使用預設的 docker 驅動程式不同,使用其他驅動程式建構的映像檔不會自動載入到本機映像檔儲存庫中。如果您未指定輸出,建構結果只會匯出到建構快取中。

若要使用非預設驅動程式建構映像檔並將其載入至映像檔儲存庫,請在建構指令中使用 --load 旗標:

$ docker buildx build --load -t <image> --builder=container .
...
=> exporting to oci image format                                                                                                      7.7s
=> => exporting layers                                                                                                                4.9s
=> => exporting manifest sha256:4e4ca161fa338be2c303445411900ebbc5fc086153a0b846ac12996960b479d3                                      0.0s
=> => exporting config sha256:adf3eec768a14b6e183a1010cb96d91155a82fd722a1091440c88f3747f1f53f                                        0.0s
=> => sending tarball                                                                                                                 2.8s
=> importing to docker

使用此選項,映像檔在建構完成後即可在本機映像檔儲存庫中使用。

$ docker image ls
REPOSITORY                       TAG               IMAGE ID       CREATED             SIZE
<image>                          latest            adf3eec768a1   2 minutes ago       197MB

預設載入

需求: Docker Buildx 0.14.0 或更高版本

您可以設定自訂建構驅動程式,使其行為類似於預設的 docker 驅動程式,並預設將映像檔載入至本機映像檔儲存庫。若要這樣做,請在建立建構器時設定 default-load 驅動程式選項:

$ docker buildx create --driver-opt default-load=true

請注意,就像 docker 驅動程式一樣,如果您使用 --output 指定了不同的輸出格式,除非您明確指定 --output type=docker 或使用 --load 旗標,否則結果將不會載入至映像檔儲存庫。

接下來

了解各個驅動程式

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.