扩展架构

扩展是在 Docker 桌面内运行的应用程序。它们被打包为 Docker 镜像,通过 Docker Hub 分发,并由用户通过 Docker Dashboard 中的 Marketplace 或 Docker Extensions CLI 进行安装。

扩展可以由三个(可选)组件组成:

  • 前端(或用户界面):显示在 Docker Desktop 仪表板选项卡中的 Web 应用程序
  • 后端:在 Docker Desktop VM 中运行的一个或多个容器化服务
  • 可执行文件:安装扩展时 Docker Desktop 在主机上复制的 Shell 脚本或二进制文件
扩展的三个组件概述

扩展不一定需要拥有所有这些组件,但至少需要其中之一,具体取决于扩展功能。为了配置和运行这些组件,Docker Desktop 使用一个metadata.json文件。有关更多详细信息,请参阅 元数据部分。

前端

前端基本上是一个由 HTML、Javascript 和 CSS 组成的 Web 应用程序。它可以使用简单的 HTML 文件、一些普通的 Javascript 或任何前端框架(例如 React 或 Vue.js)来构建。

当 Docker Desktop 安装扩展时,它会从扩展映像中提取 UI 文件夹, 如ui.有关更多详细信息,metadata.json请参阅 ui 元数据部分。

每次用户单击“扩展”选项卡时,Docker Desktop 都会初始化扩展的 UI,就像第一次一样。当他们离开该选项卡时,UI 本身以及由它启动的所有子进程(如果有)都会终止。

前端可以通过Extensions SDKdocker调用命令、与扩展后端通信或调用部署在主机上的扩展可执行文件 。

提示

生成docker extension init一个基于 React 的扩展。但您仍然可以使用它作为您自己的扩展的起点,并使用任何其他前端框架,如 Vue、Angular、Svelte 等,或者使用普通 Javascript 进行事件保留。

了解有关 为您的扩展构建前端的更多信息。

后端

除了前端应用程序之外,扩展还可以包含一个或多个后端服务。大多数情况下,Extension不需要后端,只需通过SDK调用docker命令即可实现功能。但是,在某些情况下扩展需要后端服务,例如:

  • 运行必须比前端寿命更长的长时间运行的进程
  • 将数据存储在本地数据库中并使用 REST API 将其返回
  • 存储扩展状态,例如当按钮启动长时间运行的进程时,这样,如果您离开扩展并返回,前端可以从中断的地方继续
  • 访问 Docker Desktop VM 中的特定资源,例如通过在撰写文件中安装文件夹

提示

生成docker extension init一个 Go 后端。但您仍然可以使用它作为您自己的扩展的起点,并使用任何其他语言,如 Node.js、Python、Java、.Net 或任何其他语言和框架。

通常,后端由在 Docker Desktop VM 内运行的一个容器组成。在内部,Docker Desktop 创建一个 Docker Compose 项目,根据部分的image选项创建容器,并将其附加到 Compose 项目。有关更多详细信息,请参阅 ui 元数据部分。vmmetadata.json

在某些情况下,compose.yml可以使用文件代替image.当后端容器需要更具体的选项(例如安装卷或请求 无法仅用 Docker 映像表达的功能)时,这非常有用。该compose.yml文件还可用于添加扩展所需的多个容器,例如数据库或消息代理。请注意,如果 Compose 文件定义了许多服务,则 SDK 只能联系其中的第一个。

笔记

在某些情况下,从后端与 Docker 引擎交互也很有用。请参阅 如何从后端使用 Docker 套接字。

为了与后端通信,扩展 SDK 提供了 从前端发出、 、、、 和请求的函数。在底层,通信是通过套接字或命名管道完成的,具体取决于操作系统。如果后端正在监听端口,则很难防止与主机或容器中运行的其他应用程序发生冲突。此外,一些用户在无法打开计算机上端口的受限环境中运行 Docker Desktop。GETPOSTPUTHEADDELETE

后端和前端通信

最后,后端可以使用任何技术构建,只要它可以在容器中运行并在套接字上侦听即可。

了解有关 向扩展程序添加后端的更多信息。

可执行文件

除了前端和后端之外,扩展还可以包含可执行文件。可执行文件是安装扩展时安装在主机上的二进制文件或 shell 脚本。前端可以使用 扩展 SDK调用它们。

当扩展需要与第三方 CLI 工具(如 AWSkubectl等)交互时,这些可执行文件非常有用。通过扩展传送这些可执行文件可确保 CLI 工具始终在用户计算机上以正确的版本可用。

当 Docker Desktop 安装扩展时,它会host按照metadata.json.有关更多详细信息,请参阅 ui 元数据部分。

可执行文件和前端通信

但是,由于它们是在用户的计算机上执行的,因此它们必须可供运行的平台使用。例如,如果您想发布kubectl可执行文件,则需要为 Windows、Mac 和 Linux 提供不同的版本。多架构镜像还需要包含为正确架构构建的二进制文件(AMD / ARM)

有关更多详细信息,请参阅 主机元数据部分。

了解如何 调用主机二进制文件