擴充功能架構
擴充功能 (Extensions) 是在 Docker Desktop 內部執行的應用程式。它們被封裝為 Docker 映像檔,透過 Docker Hub 發布,並由使用者透過 Docker Desktop 儀表板內的市集 (Marketplace) 或 Docker Extensions CLI 進行安裝。
擴充功能可由三個(選擇性)元件組成
- 前端(或使用者介面):顯示在 Docker Desktop 儀表板分頁中的網頁應用程式
- 後端:執行於 Docker Desktop VM 中的一個或多個容器化服務
- 執行檔:安裝擴充功能時,Docker Desktop 會複製到主機上的 Shell 指令碼或二進位檔案

擴充功能不一定需要具備上述所有元件,根據擴充功能的功能,至少需要其中之一。為了配置並執行這些元件,Docker Desktop 使用 metadata.json 檔案。詳細資訊請參閱 metadata 章節。
前端
前端基本上是由 HTML、Javascript 和 CSS 組成的網頁應用程式。它可以僅由簡單的 HTML 檔案、原生 Javascript 或任何前端框架(例如 React 或 Vue.js)建構而成。
當 Docker Desktop 安裝擴充功能時,它會從擴充功能映像檔中提取 UI 資料夾,具體由 metadata.json 中的 ui 區塊定義。詳細資訊請參閱 ui metadata 區塊。
每當使用者點擊 **Extensions (擴充功能)** 分頁時,Docker Desktop 都會重新初始化擴充功能的 UI,就像第一次開啟一樣。當使用者離開該分頁時,UI 本身及其啟動的所有子處理程序(如果有的話)都會被終止。
前端可以透過 Extensions SDK 呼叫 docker 指令、與擴充功能後端通訊,或呼叫部署在主機上的擴充功能執行檔。
提示
docker extension init指令會產生一個基於 React 的擴充功能。但您仍可將其作為自己擴充功能的起點,並使用任何其他前端框架(如 Vue、Angular、Svelte 等),甚至僅使用原生 Javascript。
進一步了解如何為您的擴充功能 建構前端。
後端
除了前端應用程式外,擴充功能也可以包含一個或多個後端服務。在大多數情況下,擴充功能不需要後端,僅需透過 SDK 呼叫 docker 指令即可實現功能。然而,在某些情況下,擴充功能需要後端服務,例如:
- 執行需要比前端存活更久的長駐程序
- 將資料儲存在本機資料庫中,並透過 REST API 提供服務
- 儲存擴充功能狀態,例如當按鈕啟動長駐程序時,若您離開擴充功能再返回,前端可以從中斷處恢復
- 存取 Docker Desktop VM 中的特定資源,例如透過在 compose 檔案中掛載資料夾
提示
docker extension init指令會產生一個 Go 後端。但您仍可將其作為自己擴充功能的起點,並使用 Node.js、Python、Java、.Net 或任何其他語言與框架。
通常,後端由一個執行在 Docker Desktop VM 內的容器組成。在內部,Docker Desktop 會建立一個 Docker Compose 專案,從 metadata.json 的 vm 區塊中的 image 選項建立容器,並將其連接到該 Compose 專案。詳細資訊請參閱 ui metadata 區塊。
在某些情況下,可以使用 compose.yaml 檔案取代 image。當後端容器需要更特定的選項(例如掛載儲存空間或請求無法單純透過 Docker 映像檔表示的 capabilities)時,這非常有用。compose.yaml 檔案也可用於新增擴充功能所需的其他容器,例如資料庫或訊息佇列。請注意,如果 Compose 檔案定義了多個服務,SDK 只能與其中第一個服務進行通訊。
注意有時,從後端與 Docker 引擎進行互動也很有用。請參閱 如何從後端使用 Docker socket。
為了與後端通訊,Extension SDK 提供了 函數,讓前端可以發送 GET、POST、PUT、HEAD 和 DELETE 請求。在底層,這些通訊是透過 Socket 或命名管線 (named pipe) 進行的,具體取決於作業系統。如果後端監聽連接埠,將很難避免與主機或已在容器中執行的其他應用程式發生衝突。此外,某些使用者是在受限環境中執行 Docker Desktop,無法在其機器上開啟連接埠。

最後,後端可以使用任何技術建構,只要它能在容器中執行並監聽 Socket 即可。
進一步了解如何為您的擴充功能 新增後端。
執行檔
除了前端和後端之外,擴充功能還可以包含執行檔。執行檔是安裝擴充功能時安裝在主機上的二進位檔案或 Shell 指令碼。前端可以使用 擴充功能 SDK 呼叫它們。
當擴充功能需要與第三方 CLI 工具(如 AWS、kubectl 等)互動時,這些執行檔非常有用。將這些執行檔與擴充功能一併發布,可確保 CLI 工具始終可用,且版本正確,並安裝在使用者機器上。
當 Docker Desktop 安裝擴充功能時,它會將執行檔複製到 metadata.json 中 host 區塊所定義的主機位置。詳細資訊請參閱 ui metadata 區塊。

然而,由於它們是在使用者的機器上執行的,因此必須與其執行所在的平台相容。例如,如果您想提供 kubectl 執行檔,您需要為 Windows、Mac 和 Linux 提供不同的版本。多架構 (Multi-arch) 映像檔也需要包含為正確架構 (AMD / ARM) 所建構的二進位檔案。
詳細資訊請參閱 host metadata 區塊。
了解如何 呼叫主機二進位檔案。