擴充套件架構

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

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

  • 前端(或使用者介面):在 Docker Desktop 儀表板的選項卡中顯示的 Web 應用程式
  • 後端:一個或多個在 Docker Desktop VM 中執行的容器化服務
  • 可執行檔案: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 本身和所有由它啟動的子程序(如果有)都會終止。

前端可以透過 擴充套件 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.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)構建的二進位制檔案

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

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