扩展体系结构

扩展是在 Docker Desktop 中运行的应用程序。它们被打包为 Docker 镜像,分布式 通过 Docker Hub,并由用户通过 Docker Desktop 仪表板中的 Marketplace 或 Docker 扩展 CLI。

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

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

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

前端

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

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

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

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

提示

docker extension init生成基于 React 的扩展。但您仍然可以将其用作 您自己的扩展并使用任何其他前端框架,如 Vue、Angular、Svelte 等,或者与 原版 Javascript。

详细了解如何为扩展构建前端

后端

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

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

提示

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

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

在某些情况下,compose.ymlfile 而不是image.这在后端容器 需要更具体的选项,例如挂载卷或请求不能仅用 Docker 镜像表示的功能。这compose.ymlfile 也可用于添加多个容器 扩展需要,如数据库或消息代理。 请注意,如果 Compose 文件定义了许多服务,则 SDK 只能联系其中的第一个服务。

注意

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

为了与后端通信,Extension SDK 提供了一些函数,使GET,POST,PUT,HEADDELETE来自前端的请求。在引擎盖下,通信是通过套接字完成的 或命名管道,具体取决于作系统。如果后端正在侦听端口,则很难 防止与主机或容器中已运行的其他应用程序发生冲突。此外,一些用户是 在受限环境中运行 Docker Desktop,在这些环境中,他们无法打开计算机上的端口。

Backend and frontend communication

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

详细了解如何向扩展添加后端

可执行文件

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

当扩展需要与第三方 CLI 工具(如 AWS)交互时,这些可执行文件非常有用。kubectl等。 将这些可执行文件与扩展一起提供可确保 CLI 工具始终可用,并且版本正确。 用户的计算机。

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

Executable and frontend communication

但是,由于它们是在用户的计算机上执行的,因此它们必须可用于运行它们的平台。 例如,如果您想将kubectl可执行文件,您需要为 Windows、Mac、 和 Linux。多架构镜像还需要包含为右架构 (AMD / ARM) 构建的Binaries

有关更多详细信息,请参阅 host metadata 部分

了解如何调用主机Binaries