擴充功能架構

擴充功能 (Extensions) 是在 Docker Desktop 內部執行的應用程式。它們被封裝為 Docker 映像檔,透過 Docker Hub 發布,並由使用者透過 Docker Desktop 儀表板內的市集 (Marketplace) 或 Docker Extensions CLI 進行安裝。

擴充功能可由三個(選擇性)元件組成

  • 前端(或使用者介面):顯示在 Docker Desktop 儀表板分頁中的網頁應用程式
  • 後端:執行於 Docker Desktop VM 中的一個或多個容器化服務
  • 執行檔:安裝擴充功能時,Docker Desktop 會複製到主機上的 Shell 指令碼或二進位檔案
Overview of the three components of an extension

擴充功能不一定需要具備上述所有元件,根據擴充功能的功能,至少需要其中之一。為了配置並執行這些元件,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.jsonvm 區塊中的 image 選項建立容器,並將其連接到該 Compose 專案。詳細資訊請參閱 ui metadata 區塊

在某些情況下,可以使用 compose.yaml 檔案取代 image。當後端容器需要更特定的選項(例如掛載儲存空間或請求無法單純透過 Docker 映像檔表示的 capabilities)時,這非常有用。compose.yaml 檔案也可用於新增擴充功能所需的其他容器,例如資料庫或訊息佇列。請注意,如果 Compose 檔案定義了多個服務,SDK 只能與其中第一個服務進行通訊。

注意

有時,從後端與 Docker 引擎進行互動也很有用。請參閱 如何從後端使用 Docker socket

為了與後端通訊,Extension SDK 提供了 函數,讓前端可以發送 GETPOSTPUTHEADDELETE 請求。在底層,這些通訊是透過 Socket 或命名管線 (named pipe) 進行的,具體取決於作業系統。如果後端監聽連接埠,將很難避免與主機或已在容器中執行的其他應用程式發生衝突。此外,某些使用者是在受限環境中執行 Docker Desktop,無法在其機器上開啟連接埠。

Backend and frontend communication

最後,後端可以使用任何技術建構,只要它能在容器中執行並監聽 Socket 即可。

進一步了解如何為您的擴充功能 新增後端

執行檔

除了前端和後端之外,擴充功能還可以包含執行檔。執行檔是安裝擴充功能時安裝在主機上的二進位檔案或 Shell 指令碼。前端可以使用 擴充功能 SDK 呼叫它們。

當擴充功能需要與第三方 CLI 工具(如 AWS、kubectl 等)互動時,這些執行檔非常有用。將這些執行檔與擴充功能一併發布,可確保 CLI 工具始終可用,且版本正確,並安裝在使用者機器上。

當 Docker Desktop 安裝擴充功能時,它會將執行檔複製到 metadata.jsonhost 區塊所定義的主機位置。詳細資訊請參閱 ui metadata 區塊

Executable and frontend communication

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

詳細資訊請參閱 host metadata 區塊

了解如何 呼叫主機二進位檔案

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.