扩展体系结构
扩展是在 Docker Desktop 中运行的应用程序。它们被打包为 Docker 镜像,分布式 通过 Docker Hub,并由用户通过 Docker Desktop 仪表板中的 Marketplace 或 Docker 扩展 CLI。
扩展可以由三个(可选)组件组成:
- 前端(或用户界面):显示在 Docker Desktop 中仪表板选项卡的 Web 应用程序
- 后端:在 Docker Desktop VM 中运行的一个或多个容器化服务
- 可执行文件:安装扩展时 Docker Desktop 在主机上复制的 Shell 脚本或二进制文件
扩展不一定需要具有所有这些组件,但至少需要其中一个组件,具体取决于扩展功能。
为了配置和运行这些组件,Docker Desktop 使用文件。有关更多详细信息,请参阅元数据部分。metadata.json
前端
前端基本上是由 HTML、Javascript 和 CSS 组成的 Web 应用程序。它可以使用简单的 HTML 构建 文件、一些 vanilla Javascript 或任何前端框架,例如 React 或 Vue.js。
当 Docker Desktop 安装扩展时,它会从扩展镜像中提取 UI 文件夹,如 .有关更多详细信息,请参阅 ui 元数据部分。ui
metadata.json
每次用户单击 Extensions 选项卡时,Docker Desktop 都会初始化扩展的 UI,就像这是第一次一样。当它们离开选项卡时,UI 本身及其启动的所有子进程(如果有)都会终止。
前端可以调用命令、与扩展后端通信或调用扩展可执行文件
部署在主机上。docker
提示
这会生成一个基于 React 的扩展。但您仍然可以将其用作 您自己的扩展并使用任何其他前端框架,如 Vue、Angular、Svelte 等,或者与 原版 Javascript。
docker extension init
详细了解如何为扩展构建前端。
后端
除了前端应用程序,扩展还可以包含一个或多个后端服务。大多数情况下,Extension 不需要后端,只需通过 SDK 调用 docker 命令即可实现功能。但是,在某些情况下,扩展需要后端 service,例如:
- 运行必须比前端寿命更长的长时间运行的进程
- 将数据存储在本地数据库中并使用 REST API 返回数据
- 存储扩展状态,例如当按钮启动长时间运行的进程时,以便如果你离开 从扩展并返回,前端可以从中断的地方继续
- 访问 Docker Desktop VM 中的特定资源,例如,通过在编写 文件
提示
这会生成一个 Go 后端。但您仍然可以将其用作 您自己的扩展,并使用任何其他语言,如 Node.js、Python、Java、.Net 或任何其他语言和框架。
docker extension init
通常,后端由一个在 Docker Desktop VM 中运行的容器组成。在内部,Docker Desktop 会创建
Docker Compose 项目中,从 和
将其附加到 Compose 项目。有关更多详细信息,请参阅 ui 元数据部分。image
vm
metadata.json
在某些情况下,可以使用 file 而不是 .这在后端容器
需要更具体的选项,例如挂载卷或请求不能仅用 Docker 镜像表示的功能。该文件还可用于添加多个容器
扩展需要,如数据库或消息代理。
请注意,如果 Compose 文件定义了许多服务,则 SDK 只能联系其中的第一个服务。compose.yml
image
compose.yml
注意
在某些情况下,从后端与 Docker 引擎交互也很有用。 请参阅如何从后端使用 Docker 套接字。
为了与后端通信,Extension SDK 提供了从前端发出 、 和 请求 的功能。在引擎盖下,通信是通过套接字完成的
或命名管道,具体取决于操作系统。如果后端正在侦听端口,则很难
防止与主机或容器中已运行的其他应用程序发生冲突。此外,一些用户是
在受限环境中运行 Docker Desktop,他们无法在其计算机上打开端口。GET
POST
PUT
HEAD
DELETE
最后,后端可以用任何技术构建,只要它可以在容器中运行并监听套接字即可。
详细了解如何向扩展添加后端。
可执行文件
除了前端和后端之外,扩展还可以包含可执行文件。可执行文件是二进制文件或 shell 脚本 ,这些组件将在安装扩展时安装在主机上。前端可以使用扩展 SDK 调用它们。
当扩展需要与第三方 CLI 工具(如 AWS 等)交互时,这些可执行文件非常有用。
将这些可执行文件与扩展一起提供可确保 CLI 工具始终可用,并且版本正确。
用户的计算机。kubectl
当 Docker Desktop 安装扩展时,它会按照
这。有关更多详细信息,请参阅 ui 元数据部分。host
metadata.json
但是,由于它们是在用户的计算机上执行的,因此它们必须可用于运行它们的平台。
例如,如果要提供可执行文件,则需要为 Windows、Mac、
和 Linux。多架构镜像还需要包含为右架构 (AMD / ARM) 构建的二进制文件kubectl
有关更多详细信息,请参阅 host metadata 部分。
了解如何调用主机二进制文件。