扩展架构
扩展是在 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 元数据部分。vm
metadata.json
在某些情况下,compose.yml
可以使用文件代替image
.当后端容器需要更具体的选项(例如安装卷或请求
无法仅用 Docker 映像表达的功能)时,这非常有用。该compose.yml
文件还可用于添加扩展所需的多个容器,例如数据库或消息代理。请注意,如果 Compose 文件定义了许多服务,则 SDK 只能联系其中的第一个。
笔记
在某些情况下,从后端与 Docker 引擎交互也很有用。请参阅 如何从后端使用 Docker 套接字。
为了与后端通信,扩展 SDK 提供了
从前端发出、
、、、 和请求的函数。在底层,通信是通过套接字或命名管道完成的,具体取决于操作系统。如果后端正在监听端口,则很难防止与主机或容器中运行的其他应用程序发生冲突。此外,一些用户在无法打开计算机上端口的受限环境中运行 Docker Desktop。GET
POST
PUT
HEAD
DELETE


最后,后端可以使用任何技术构建,只要它可以在容器中运行并在套接字上侦听即可。
了解有关 向扩展程序添加后端的更多信息。
可执行文件
除了前端和后端之外,扩展还可以包含可执行文件。可执行文件是安装扩展时安装在主机上的二进制文件或 shell 脚本。前端可以使用 扩展 SDK调用它们。
当扩展需要与第三方 CLI 工具(如 AWSkubectl
等)交互时,这些可执行文件非常有用。通过扩展传送这些可执行文件可确保 CLI 工具始终在用户计算机上以正确的版本可用。
当 Docker Desktop 安装扩展时,它会host
按照metadata.json
.有关更多详细信息,请参阅
ui 元数据部分。


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