Docker Swarm 有新特性了:Moby 项目更新频繁,2023年三个大版本
Moby 是一个从 Docker 衍生出来的开源项目,它在今年计划发布三个主要版本更新。
Docker 工程师 Sebastiaan van Stijn(左)与 Bjorn Neeargaard 在 Dockercon 23 上的演讲。
开源 Moby 项目的最后一个主要版本是在 2020 年发布的,但据两位 Moby 贡献者称,今年该项目将发布三个主要版本。
Moby 项目是一个组件集合,用于构建基于容器的系统。项目中包括了容器运行时、容器注册表、容器构建工具、编排工具以及网络、日志记录和监控工具。这些组件可用于构建基于容器的系统,例如云原生应用程序、微服务架构、CI/CD 管道和本地容器平台等。
Moby 维护者 Bjorn Neergaard 是 Docker 的高级软件工程师。本月早些时候,他与技术指导委员会成员 Sebastiaan van Stijn(也是 Docker 的软件工程师)一起在 DockerCon 上介绍了 Moby 项目的最新进展,并公布了 2023 年将要发布的主要版本的细节以及未来的计划。
Neergaard 和 van Stijn 在 DockerCon 演讲中首先简要介绍了 Moby 这个开源项目的来历。van Stijn 表示,它可以追溯到开发人员最早使用容器作为轻量级虚拟机的时代,那时候这种虚拟机很难用且非常小众。
“它没有流行起来,因为它太复杂了,”van Stijn 说。“它很难保持同步;没有镜像分发,啥分发都没有。”
然后 dotCloud(一个小型的平台即服务,后来成为 Docker)开始向用户提供服务了。不过实际上,技术人员真正感兴趣的是 dotCloud 在幕后所做的事情:他们正在部署很多技术容器,其中大部分是用 Python 编写的,得写大量脚本才能把容器跑起来,van Stijn 解释道。后来 dotCloud 决定把他们一直在内部使用的东西开源。
然后,在 2013 年,Docker 创始人 Solomon Hykes 在 PyCon 的闪电演讲中介绍了 Linux 容器。
“虽然只提了五分钟,但它在业界引起了不小的震动,因为在这五分钟内他第一次展示了一个跑起来的 Docker,”van Stijn 说。“Docker 包揽了他原本要用 LXC 来做的大量工作,但只需一条命令就搞定了。”
当时 Docker 仍然是 LXC 的一个包装器,由 LXC 承担所有繁重的任务。它简化了用户操作体验,而且还提供了一种镜像格式——这是一大进步,因为现在开发人员可以给容器用镜像了,用不着为容器创建专属的文件系统。这时候还没有构建。他补充说,它还提供了一个 API,让开发人员可以做一些“很酷的事情”。
“它确实对市场造成了很大的影响,因为 Linux 容器第一次成为现实,并走进了开发人员的工作中,”他说。
van Stijn 表示,LXC 用起来挺好的,但 Docker 还是决定重写运行时,这样就可以有内置于 Docker 引擎中的原生运行时了。后来随着更多功能(例如网络)进入 Docker,这一步被证明是非常正确的。容器流行了起来,但每个容器都有一个任务,这意味着程序员在大多数堆栈中都需要多个容器。于是有人开始尝试做编排,后来编排也有了组合,而且让用户可以定义 YAML 文件了。
Docker 收购了 Fig,后者成为了 Docker Compose。然后 Docker 推出了 Swarm,它的第一个版本让开发人员可以在机器集群中运行他们的容器。van Stijn 表示,随后 Kubernetes 上线并决定使用 Docker 作为运行时,因为后者是运行容器的事实标准。他补充说,这也导致了一些问题,因为越来越多的人要求的各种功能显然超出了该项目的设计目标。
“Kubernetes 不需要 Docker 的网络堆栈,他们不需要我们提供的其他东西,但他们仍在使用运行时,有时就会出各种问题,”他说。“引擎的单体架构问题越来越大。”
此外,虽然 Docker 是事实标准,但这方面并没有关于容器镜像或运行时运行方式的正式规范,他说。
“实现是规范,但并不总是让人满意,”他说。
Docker 决定把实际的运行时分割出去。大约在同一时间,标准组织 OCI 成立。Docker 向组织捐赠了用于分发镜像的规范,以及运行时规范和镜像。
“现在其他人也可以实现运行时、镜像和注册表了,Docker 不再是唯一选项。”
Docker 还开始与几个合作伙伴公司从头开始重写运行时,结果就是 containerd(发音为“container D”),这是对 Docker 运行时部分的完全重写。
van Stijn 在演讲中告诉观众,当 Docker 决定将项目进一步拆分为多个更小的组件时,Moby 项目就开始了,因为人们想要使用 Containerd 和 Docker 引擎的其他部分。这也催生了用于构建用途的 Build Kits、用于编排的 Swarm Kit 以及 Docker 引擎。他补充说,作为一个单独的项目,CLI 成为了 Docker 产品的一部分。运行时本身演变为 Moby 项目。
他说:“这可以让大家在其基础上来做构建、参与,但也让人们更容易接受一些可能不会直接让 Docker 这个产品获益、但可以被他人用上的更改,反之亦然。”
随着企业产品转向 Mirantis,Docker 本身也发生了变化,它又变回了面向开发者的产品。他补充说,Docker 开始专注于 Docker 桌面,而 Moby 项目的工作进展缓慢,直到过去 18-24 个月,Mirantis 和微软的维护人员加入了这项工作后情况开始变化。
“有一件事情让大家很是困惑,那就是名为 Docker 的开源代码到底变成了什么样,”Neergaard 解释道。“但也许这也能说明一个问题:在 Docker, Inc. 之外,现在项目有了更多的参与者——而且不仅仅是参与者,还是项目的利益相关者。”
Neergaard 补充道,除了 Mirantis 和微软之外,英伟达最近也贡献了容器设备接口支持。
“最近,我们也看到该项目有了更多的活动,”Neergaard 说。“可以从多种形式看出这一变化,不过下图可能还不全。”
Moby 项目的最新活动
Docker 引擎的最新版本是在 2020 年发布的。时至今日又出现了很多代码和改进,但一直没出可以搭载这些改进的新版本,他补充道。
今年已经发布了两个主要版本——版本 23.0 和 24.0,其主要特性包括:
BuildKit,默认开启(不再有 DOCKER_BUILDKIT=1)。Neergaard 说,BuildKit 是对构建器的重写。“BuildKits 最初的任务和计划的一部分是让它取代 Docker 引擎中的经典遗留构建器,并提供更丰富、更灵活的构建平台,并且依旧像 Docker 构建一样简单,”他说。“所以 BuildKit 现在默认处于启用状态。”
Swarm 中的 CSI(容器存储接口)
可选 containerd shim:
gVisor
Kata 容器
WebAsseambly
Neergaard 说,备选 shim “可能很无聊”,但开辟了很多可能性,“特别是对于那些想搞出一些新方法来运行容器或看起来有点像容器的东西(例如 WebAssembly)的人们来说是这样的。”
该团队曾希望在 DockerCon 之前提供第三个版本 25.0,但结果没有成行。根据演示内容,预计这个版本现在会随时发布。该版本将包括:
CDI(容器设备接口)
OTEL(OpenTelemetry)集成到引擎中
Neergaard 说,“优雅”的健康检查与健康开始间隔长期以来一直是一个痛点。
“今年我们的确准备发布三个版本的引擎更新,不管怎样这是很大的挑战;我们每次都在进步。”Neergaard 说道。
“另一件有趣且让人想不到的事情是 Docker Swarm 中还有新特性,”他说。他解释说,Swarm 是 Docker 对 Kubernetes 的回应。
Neergaard 说:“在这一点上,我想说 Kubernetes 在很大程度上是编排平台的事实标准,除非有充分的理由,否则你可能不应该选择 Kubernetes 以外的其他平台。” “有一小部分颇有声量的用户群体喜欢使用 Swarm,并且希望 Swarm 能做更多事情,甚至与 Kubernetes 现有的许多附加组件和扩展兼容。”
Moby 项目的未来计划包括在 Containerd 中添加多个快照程序和原生多架构,以及重新设计的 CLI、错误修复和新的网络功能,还有将协调器逻辑从 Compose 移动到声明式 Docker 的守护进程中,两人补充道。
原文链接:
https://thenewstack.io/the-moby-project-post-kubernetes-3-new-releases-in-2023/
声明:本文为 InfoQ 翻译,未经许可禁止转载。
微信扫码关注该文公众号作者