擴充套件架構

擴充套件是執行在 Docker Desktop 中的應用程式。它們被打包成 Docker 映象,透過 Docker Hub 分發,使用者可以透過 Docker Desktop Dashboard 中的 Marketplace 或 Docker Extensions CLI 安裝。

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

  • 前端(或使用者介面):在 Docker Desktop 儀表板的一個選項卡中顯示的 Web 應用程式
  • 後端:在 Docker Desktop 虛擬機器中執行的一個或多個容器化服務
  • 可執行檔案:Docker Desktop 在安裝擴充套件時複製到主機上的 Shell 指令碼或二進位制檔案
Overview of the three components of an extension

一個擴充套件不一定需要所有這些元件,但至少需要其中一個,具體取決於擴充套件功能。為了配置和執行這些元件,Docker Desktop 使用一個 metadata.json 檔案。有關更多詳細資訊,請參閱元資料部分。

前端

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

當 Docker Desktop 安裝擴充套件時,它會從擴充套件映象中提取 UI 資料夾,如 metadata.json 中的 ui 部分所定義。有關更多詳細資訊,請參閱ui 元資料部分

每次使用者點選擴充套件選項卡時,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 元資料部分

在某些情況下,可以使用 compose.yaml 檔案而不是 image。當後端容器需要更具體的選項時(例如掛載卷或請求無法僅透過 Docker 映象表達的功能),這會很有用。compose.yaml 檔案還可以用於新增擴充套件所需的多個容器,例如資料庫或訊息代理。請注意,如果 Compose 檔案定義了多個服務,SDK 只能聯絡其中的第一個。

注意

在某些情況下,與 Docker 引擎進行後端互動也很有用。請參閱如何從後端使用 Docker 套接字

為了與後端通訊,Extension 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)構建的二進位制檔案

有關更多詳細資訊,請參閱主機元資料部分

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