扩展架构
扩展是在 Docker Desktop 中运行的应用程序。它们打包为 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 文件夹,如 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.json
的 vm
部分的 image
选项创建容器,并将其附加到 Compose 项目。有关更多详细信息,请参见 ui 元数据部分。
在某些情况下,可以使用 compose.yml
文件而不是 image
。这在后端容器需要更多特定选项时很有用,例如挂载卷或请求 功能,而不能仅用 Docker 映像来表达。compose.yml
文件也可用于添加扩展所需的多个容器,例如数据库或消息代理。请注意,如果 Compose 文件定义了多个服务,则 SDK 只能联系其中第一个。
注意
在某些情况下,从后端与 Docker 引擎交互也很有用。请参见 如何从后端使用 Docker 套接字。
为了与后端通信,扩展 SDK 提供了 函数,以从前端发出 GET
、POST
、PUT
、HEAD
和 DELETE
请求。在幕后,通信通过套接字或命名管道完成,具体取决于操作系统。如果后端正在侦听端口,则很难阻止与主机上或现有容器中运行的其他应用程序发生冲突。此外,一些用户在受限环境中运行 Docker Desktop,在这种环境下他们无法在机器上打开端口。


最后,可以使用任何技术构建后端,只要它可以在容器中运行并在套接字上侦听即可。
了解有关为您的扩展添加后端的更多信息。
可执行文件
除了前端和后端外,扩展还可以包含可执行文件。可执行文件是安装扩展时安装在主机上的二进制文件或 shell 脚本。前端可以使用 扩展 SDK 调用它们。
当扩展需要与第三方 CLI 工具(如 AWS、kubectl
等)交互时,这些可执行文件很有用。将这些可执行文件与扩展一起提供,可确保 CLI 工具始终可用,并具有正确的版本,在用户的机器上。
当 Docker Desktop 安装扩展时,它会将可执行文件复制到主机上,如 metadata.json
中的 host
部分所定义。有关更多详细信息,请参见 ui 元数据部分。


但是,由于它们是在用户的机器上执行的,因此它们必须对正在运行的平台可用。例如,如果您想提供 kubectl
可执行文件,则需要为 Windows、Mac 和 Linux 提供不同的版本。多架构映像还需要包括为正确架构(AMD/ARM)构建的二进制文件
有关更多详细信息,请参见 主机元数据部分。
了解如何 调用主机二进制文件。