Docker Build 概述
Docker Build 採用客戶端-伺服器架構,其中:
- 客戶端:Buildx 是執行和管理建置工作的客戶端及使用者介面。
- 伺服器:BuildKit 是處理建置執行工作的伺服器,或稱為建置器 (builder)。
當您發起建置時,Buildx 客戶端會向 BuildKit 後端傳送建置請求。BuildKit 會解析建置指令並執行建置步驟。建置輸出內容會被傳回給客戶端,或上傳至容器登錄庫(例如 Docker Hub)。
Buildx 與 BuildKit 皆已預先安裝在 Docker Desktop 與 Docker Engine 中。當您執行 docker build 指令時,即是透過 Buildx 使用 Docker 內建的預設 BuildKit 來執行建置。
Buildx
Buildx 是您用來執行建置的 CLI 工具。docker build 指令實際上是 Buildx 的封裝。當您執行 docker build 時,Buildx 會解讀建置選項,並向 BuildKit 後端發送建置請求。
Buildx 客戶端的功能不限於執行建置。您也可以使用 Buildx 建立與管理 BuildKit 後端(稱為建置器)。它還支援管理登錄庫中的映像檔,以及同時執行多項建置的功能。
Docker Buildx 會隨 Docker Desktop 一併預設安裝。您也可以從原始碼編譯 CLI 外掛程式,或從 GitHub 儲存庫取得二進位檔案手動安裝。更多資訊請參閱 GitHub 上的 Buildx README。
注意雖然
docker build在底層會調用 Buildx,但該指令與規範的docker buildx build之間存在細微差異。詳細資訊請參閱docker build與docker buildx build之間的差異。
BuildKit
BuildKit 是執行建置工作負載的守護行程 (daemon) 進程。
建置執行流程始於 docker build 指令的調用。Buildx 會解讀您的建置指令,並向 BuildKit 後端傳送建置請求。建置請求包含:
- Dockerfile
- 建置參數
- 匯出選項
- 快取選項
BuildKit 會解析建置指令並執行建置步驟。在 BuildKit 執行建置的過程中,Buildx 會監控建置狀態並將進度輸出到終端機。
如果建置需要客戶端的資源(例如本機檔案或建置機密),BuildKit 會向 Buildx 請求所需的資源。
這是 BuildKit 相較於舊版 Docker 建置器更有效率的原因之一。BuildKit 僅在需要時才請求所需的資源。相比之下,舊版建置器總是會複製一份本機檔案系統。
BuildKit 可向 Buildx 請求的資源範例包括:
- 本機檔案系統建置上下文 (build contexts)
- 建置密碼
- SSH socket
- 登錄庫驗證憑證 (authentication tokens)
關於 BuildKit 的更多資訊,請參閱 BuildKit。