擴充功能架構

擴充功能是在 Docker Desktop 內執行的應用程式。它們被打包成 Docker 映像檔,透過 Docker Hub 發佈,並由使用者透過 Docker Desktop 儀表板中的 Marketplace 或 Docker Extensions CLI 安裝。

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

  • 前端(或使用者介面):顯示在 Docker Desktop 儀表板索引標籤中的 Web 應用程式
  • 後端:在 Docker Desktop 虛擬機器中執行的容器化服務
  • 可執行檔:Docker Desktop 在安裝擴充功能時複製到主機上的 Shell 指令碼或二進位檔
Overview of the three components of an extension

擴充功能不一定要具備所有這些元件,但至少需要其中一個,具體取決於擴充功能的功能。為了設定和執行這些元件,Docker Desktop 使用 metadata.json 檔案。詳情請參閱metadata 章節。

前端

前端基本上是由 HTML、Javascript 和 CSS 組成的 Web 應用程式。它可以用一個簡單的 HTML 檔案、一些原生 Javascript 或任何前端框架(例如 React 或 Vue.js)來建構。

當 Docker Desktop 安裝擴充功能時,它會從擴充功能映像檔中提取 UI 資料夾,如 metadata.json 中的 ui 章節所定義。詳情請參閱ui metadata 章節

每次使用者點擊「擴充功能」索引標籤時,Docker Desktop 就會初始化擴充功能的 UI,如同第一次使用一樣。當使用者離開索引標籤時,UI 本身及其啟動的所有子程序(如果有的話)都會終止。

前端可以透過 Extensions SDK 呼叫 docker 指令、與擴充功能後端通訊,或呼叫部署在主機上的擴充功能可執行檔。

提示

docker extension init 會產生一個基於 React 的擴充功能。但您仍然可以將其用作您自己擴充功能的起點,並使用任何其他前端框架,例如 Vue、Angular、Svelte 等,甚至使用原生 Javascript。

深入瞭解如何為您的擴充功能建構前端

後端

除了前端應用程式之外,擴充功能還可以包含一個或多個後端服務。在大多數情況下,擴充功能不需要後端,只需透過 SDK 呼叫 docker 指令即可實現功能。但是,在某些情況下,擴充功能需要後端服務,例如:

  • 要執行必須比前端存活時間更長的長時間執行程序
  • 要將資料儲存在本機資料庫中,並透過 REST API 將其提供回來
  • 要儲存擴充功能狀態,例如當按鈕啟動長時間執行程序時,以便在您離開擴充功能然後返回時,前端可以從上次停止的地方繼續執行
  • 要存取 Docker Desktop 虛擬機器中的特定資源,例如透過在 compose 檔案中掛載資料夾

提示

docker extension init 會產生一個 Go 後端。但您仍然可以將其用作您自己擴充功能的起點,並使用任何其他語言,例如 Node.js、Python、Java、.Net 或任何其他語言和框架。

通常,後端由在 Docker Desktop 虛擬機器中執行的單個容器組成。在內部,Docker Desktop 會建立一個 Docker Compose 專案,從 metadata.jsonvm 章節的 image 選項建立容器,並將其附加到 Compose 專案。詳情請參閱 ui metadata 章節

在某些情況下,可以使用 compose.yml 檔案代替 image。當後端容器需要更特定的選項時,例如掛載磁碟區或請求 權限(而這些權限無法僅用 Docker 映像檔表達)時,這會很有用。compose.yml 檔案也可以用於新增擴充功能所需的多個容器,例如資料庫或訊息代理。請注意,如果 Compose 檔案定義了許多服務,SDK 只能連繫其中的第一個服務。

注意事項

在某些情況下,也需要從後端與 Docker 引擎互動。請參閱從後端如何使用 Docker 通訊端

為了與後端通訊,擴充功能 SDK 提供了函式,可以從前端發出 GETPOSTPUTHEADDELETE 請求。實際上,通訊是透過通訊端或命名管道完成的,具體取決於作業系統。如果後端正在監聽一個埠,則很難防止與主機上或容器中已執行的其他應用程式發生衝突。此外,有些使用者在受限的環境中執行 Docker Desktop,他們無法在其機器上開啟埠。

Backend and frontend communication

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

深入瞭解如何將後端新增到您的擴充功能。

可執行檔

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

當擴充功能需要與第三方 CLI 工具(例如 AWS、kubectl 等)互動時,這些可執行檔會很有用。將這些可執行檔與擴充功能一起提供,可確保 CLI 工具始終以正確的版本在使用者的機器上可用。

當 Docker Desktop 安裝擴充功能時,它會根據 metadata.json 中的 host 區段定義,將可執行檔複製到主機上。有關更多詳細資訊,請參閱UI 中繼資料區段

Executable and frontend communication

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

有關更多詳細資訊,請參閱主機中繼資料區段

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