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 builddocker buildx build 之間的區別

BuildKit

BuildKit 是執行構建工作負載的守護程序。

構建執行從呼叫 docker build 命令開始。Buildx 會解析你的構建命令並向 BuildKit 後端傳送構建請求。構建請求包括:

  • Dockerfile
  • 構建引數
  • 匯出選項
  • 快取選項

BuildKit 解析構建指令並執行構建步驟。在 BuildKit 執行構建期間,Buildx 會監控構建狀態並將進度列印到終端。

如果構建需要客戶端提供的資源,例如本地檔案或構建秘密,BuildKit 會向 Buildx 請求所需的資源。

與早期 Docker 版本使用的傳統構建器相比,這是 BuildKit 更高效的一種方式。BuildKit 只在需要時才請求構建所需的資源。相比之下,傳統構建器總是複製整個本地檔案系統。

BuildKit 可以向 Buildx 請求的資源示例包括:

  • 本地檔案系統構建上下文
  • 構建秘密
  • SSH socket
  • 倉庫身份驗證令牌

有關 BuildKit 的更多資訊,請參閱 BuildKit

頁面選項