什么是 Moby,它与 Docker 有什么关系?

x33g5p2x  于2022-02-12 转载在 Docker  
字(2.3k)|赞(0)|评价(0)|浏览(170)

Docker 的Moby 项目将 Docker Engine 的基础组件拆解成一个模块化工具包,其他基于容器的系统可以重用该工具包。Moby在 2017 年从当时单一的 Docker 代码库中分离出来。它已经发展成为一个综合的容器后端组件库,可以组合起来创建像 Docker 本身一样的完整容器解决方案。

作为 Docker 最终用户,您不会直接与 Moby 项目进行交互。它针对的是构建容器化平台的人,而不是构建和运行容器镜像的开发人员。但是,您可能会在 Docker 的文档中或在提交错误报告和功能请求时遇到 Moby。

Moby 之前的 Docker

Docker 最初是在一个包含项目所需一切的代码库中开发的。这包括从容器运行时和映像构建器到存储提供程序、网络管理和 CLI。

随着 Docker 的采用在过去十年的中期激增,人们观察到这种一体化方法阻碍了更广泛的生态系统。补充工具不能建立在 Docker 的特定部分上,因为没有任何组件化。外部供应商不得不引入 Docker 的整个庞大平台。

containerd等核心功能单元被迅速拆分为独立模块。社区现在可以创建新的容器系统,而无需重新发明与内核协调以启动容器实例的运行时。runc和HyperKit等其他组件紧随其后,从 Docker 项目中分离出来,然后作为模块化依赖项拉回 Docker Engine 版本。
Moby 通过将更多组件从 Docker 中分离出来,将这种方法提升到了一个新的水平。以前的docker/dockerGitHub 存储库变成moby/moby了; 它将 Docker Engine 代码的开源部分保存在社区可访问的位置,独立于闭源 Docker CE 和 EE 产品存储库。

装配模式

有了 Moby,任何人都可以混合和匹配 Docker 的部分技术,而不必被迫投入全部。它提供了构成容器化平台的所有关键子系统的实现。您可以将自己的 Docker 版本组合在一起,然后交换部分以在特定功能领域使用替代项目。

Moby 的方法以汽车行业对共享平台的使用为蓝本。Marques 从单一底盘和发动机系列构建整个模型系列。通过采用共享平台并对其进行调整以适应新车的设计要求,可以为阵容添加新选项。该平台不一定按原样使用:作为性能选择提供的模型可能具有使用该平台的其他模型不可用的引擎选项和底盘修改。

Moby 提供了类似于容器系统开发者的东西。您可以从提供经过验证的交叉兼容性的预构建组件开始。这是基本的共享汽车平台。随着系统的发展,您可以用新的实现替换单个模块,以创建更强大的工具。一个例子可能是用更高性能的替代方案替换 BuildKit 图像构建器。这类似于汽车制造商用更高容量的替代品替换其平台的标准小型发动机。

因此,Moby 开发人员体验是一种组装和扩展。每个基于 Moby 的项目都将使用一组不同的部件来实现一个独特的目标。在 Moby 之前,开发人员在容器生态系统的特定领域进行创新时没有可访问的起点。现在,随着 Moby 填补空白,发展可以更加集中。

Moby 包括什么?

Moby 提供三种不同的功能产品:

一个后端组件库,实现了常见的容器功能,例如图像构建、存储管理和日志收集。
一个带有支持工具的框架,可帮助您在自己的系统中组合、构建和测试组件的程序集。该工具链为所有现代架构、操作系统和云环境生成可执行工件。
框架使用示例,包括参考程序集。此参考程序集是构建 Docker 产品的开源核心。您可以使用它来更好地了解 Moby 组件如何组合成一个有凝聚力的系统。
这些部分为系统构建者提供了创建自己的容器化平台的所有要素。它们在不将项目与 Docker 及其封闭生态系统耦合的情况下促进创新。该模型被描述为“包含但可更换的电池”。
Moby 是完全开源和社区主导的。Docker 将其开源组件贡献给项目,外部各方也可以添加部分。Docker 还致力于继续使用 Moby 作为其上游;这意味着对 Moby 所做的更改将在您安装 Docker 时显示出来。

Moby 实际上并不是 Docker 依赖关系树的终点。一些组件(例如 Containerd 运行时)已捐赠给CNCF,因此与 Moby 分开维护。Moby 使用 Containerd 作为其默认容器运行时,但它被包含为上游依赖项,而不是项目的成员。

从 Moby 到 Docker

虽然 Moby 包含容器系统的所有基础知识,但它对系统开发人员的关注意味着安装参考程序集不会为您提供最佳体验。这是 Docker 等下游项目增加价值的地方。他们在 Moby 的基础上创建了一个平台,该平台以对使用容器和图像的最终用户有用的方式运行。

例如,docker pull ubuntu:latest无需任何手动配置即可安装和运行 Docker。这是因为 Docker 的预配置为从 Docker Hub 中提取不合格的图像引用。这不适用于 Moby 参考程序集;尽管它能够提取图像,但它没有默认注册表,因此无法解析标签。

下游平台为 Moby 提供的客观功能集添加了意见。虽然容器系统开发人员不想要预配置的注册表 URL,但它对于映像构建者来说是一个有用的好东西。在 Moby 推出之前,平台开发人员无法过滤掉 Docker 基于产品的决策。

概括

Moby 是后端容器组件的模块化工具包。它位于针对构建和运行容器映像的最终用户的平台的上游。Moby 适用于创建像 Docker 这样的系统但不想继承其默认值、意见和与 Docker Inc. 联系的人。
Moby 促进了一个不再由 Docker 单体控制的更高效的容器生态系统。大多数 Docker 用户不会注意到这种变化,因为 Moby 的引入主要简化了Kubernetes、Podman和其他容器环境等工具的开发。这些项目受益于共享关键组件,这些组件已被提炼成其裸露的功能元素。

相关文章

微信公众号

最新文章

更多