建置器
構建器 (Builder) 是您可以用來執行建置任務的 BuildKit 常駐程式。BuildKit 是負責解析 Dockerfile 中的構建步驟,以產生容器映像檔或其他人工製品的構建引擎。
您可以建立並管理構建器、檢查它們,甚至連線到遠端執行的構建器。您可以使用 Docker CLI 與構建器互動。
預設構建器
Docker Engine 會自動建立一個構建器,並將其作為您建置任務的預設後端。此構建器使用隨常駐程式綁定 (bundled) 的 BuildKit 函式庫,無需進行任何設定。
預設構建器直接與 Docker 常駐程式及其 context (內容環境) 綁定。如果您變更了 Docker context,您的 default 構建器將指向新的 Docker context。
建置驅動程式
Buildx 實作了構建驅動程式 (build drivers) 的概念,用於指向不同的構建器設定。由常駐程式建立的預設構建器使用 docker 驅動程式。
Buildx 支援下列構建驅動程式:
docker:使用綁定在 Docker 常駐程式中的 BuildKit 函式庫。docker-container:使用 Docker 建立一個專用的 BuildKit 容器。kubernetes:在 Kubernetes 叢集中建立 BuildKit Pod。remote:直接連線到手動管理的 BuildKit 常駐程式。
已選取的構建器
「已選取的構建器」是指執行建置指令時預設使用的構建器。
當您執行建置,或透過 CLI 與構建器互動時,可以使用選用的 --builder 旗標,或使用 BUILDX_BUILDER 環境變數來指定構建器的名稱。如果您未指定構建器,將會使用「已選取的構建器」。
使用 docker buildx ls 指令可查看可用的構建器實例。構建器名稱旁邊的星號 (*) 表示該構建器為已選取狀態。
$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS BUILDKIT PLATFORMS
default * docker
default default running v0.11.6 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
my_builder docker-container
my_builder0 default running v0.11.6 linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
選擇不同的構建器
若要在構建器之間切換,請使用 docker buildx use <name> 指令。
執行此指令後,當您發起建置時,系統會自動選取您指定的構建器。
docker build 與 docker buildx build 的區別
儘管 docker build 是 docker buildx build 的別名,但這兩個指令之間存在細微差別。使用 Buildx 時,建置客戶端與常駐程式 (BuildKit) 是解耦的。這意味著您可以在單一客戶端上使用多個構建器,甚至是遠端的構建器。
為了確保與舊版 Docker CLI 的向後相容性,docker build 指令預設始終使用隨 Docker Engine 綁定的預設構建器。另一方面,docker buildx build 指令在將建置任務發送到 BuildKit 之前,會先檢查您是否設定了其他構建器作為預設構建器。
若要將 docker build 指令用於非預設構建器,您必須:
透過
--builder旗標或BUILDX_BUILDER環境變數明確指定構建器。$ BUILDX_BUILDER=my_builder docker build . $ docker build --builder my_builder .執行以下指令,將 Buildx 設定為預設客戶端:
$ docker buildx install這會更新您的 Docker CLI 設定檔,確保所有與建置相關的指令皆透過 Buildx 進行路由。
提示若要復原此變更,請執行
docker buildx uninstall。
一般而言,當您想使用自訂構建器時,我們建議使用 docker buildx build 指令。這能確保您的 已選取構建器 設定被正確解讀。
補充資訊
- 有關如何與構建器互動及管理構建器的資訊,請參閱 管理構建器 (Manage builders)
- 若要了解不同類型的構建器,請參閱 構建驅動程式 (Build drivers)