Docker Build 概述
Docker Build 採用客戶端-伺服器架構,其中:
- 客戶端:Buildx 是用於執行和管理構建的客戶端和使用者介面。
- 伺服器:BuildKit 是處理構建執行的伺服器或構建器。
當你呼叫構建時,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 是執行構建工作負載的守護程序。
構建執行始於呼叫 docker build
命令。Buildx 解釋你的構建命令並向 BuildKit 後端傳送構建請求。構建請求包括:
- Dockerfile
- 構建引數
- 匯出選項
- 快取選項
BuildKit 解析構建指令並執行構建步驟。在 BuildKit 執行構建時,Buildx 會監控構建狀態並將進度列印到終端。
如果構建需要來自客戶端的資源,例如本地檔案或構建金鑰,BuildKit 會向 Buildx 請求所需的資源。
與早期 Docker 版本中使用的傳統構建器相比,這是 BuildKit 更高效的一個方面。BuildKit 僅在需要時才請求構建所需的資源。相比之下,傳統構建器總是複製本地檔案系統。
BuildKit 可以向 Buildx 請求的資源示例包括:
- 本地檔案系統構建上下文
- 構建機密
- SSH 套接字
- 登錄檔認證令牌
有關 BuildKit 的更多資訊,請參閱 BuildKit。