如果 Docker 提供的不是虚拟化,那是什么?

还没有读者喜欢这篇文章。
Open field

Opensource.com

首先声明,这篇文章绝对不是一篇批评 Docker 的文章。我实际上很喜欢 Docker,并且我认为它是一个非常出色的软件,将会取得巨大的成功。但我不得不承认,我不确定它是否应该获得行业内许多人赋予它的虚拟化名号。

现在,在您开始召集虚拟队伍在评论区指责我亵渎神明或异端邪说之前,请听我说完。

首先,我认为,重要的是要意识到,在技术领域,尤其是在前沿技术领域,每个人都很难就大多数单词的通用定义达成一致。在云计算虚拟化的术语中尤其如此。一般来说,对我而言,以及对于本次讨论的背景,虚拟化指的是对实体提供的服务进行抽象化,使其可以按照消费实体期望的方式被消费,而无需考虑提供服务的实体的特性。或者换句话说:虚拟化是以这样一种方式将服务的消费者与服务的提供者隔离开来,以便双方都可以保持其原生的交互方式。这种抽象可以通过模拟、仿真、转换或其他方式来实现,但关键功能是使某物看起来像另一物,以便可以使用。

例如,虚拟机监控程序允许多个独立的操作系统通过抽象服务器提供的服务(CPU、内存、磁盘等)来消费单个物理服务器,这样每个操作系统都忽略了服务器的真实底层特性。正是 Docker 缺乏抽象服务这一关键功能,使我无法将其称为虚拟化

你们中的许多人现在可能正在想,“Docker 确实为应用程序提供了虚拟化。它为它们虚拟化了操作系统。” 我的回应是恭敬地提出,Docker 实际上并没有抽象或虚拟化任何东西。它是一个软件包,管理着几个通常是独立的 Linux 功能,以使其协同工作,从而提供给定的功能。Docker,不像虚拟机监控程序那样,不会隔离或抽象服务给消费者。Docker,不那么简单地说,充当一个协调器,将各种服务协调在一起,使它们协同工作。甚至可以说 Docker 不是提供应用程序消费的服务所必需的组件。

现在说了这么多,我应该补充一点,即使我觉得自己是一个相当高级的管理员,我也无法想象手动完成 Docker 执行的任务。这简直是一项令人生畏的任务,原因在于大量的依赖关系、缺乏对所有正在使用的功能的理解以及管理工具缺乏健壮性。对于那些会说“只需编写一个脚本”的人,我会回应说“当 Docker 为我们做这件事时,为什么要这样做呢?”

在我看来,Docker 确实是一个很棒的软件。我承认我没有审查过代码,我不是开发者。如果允许我过度简化,我的工作是让事情运转起来。Docker 做到了这一点,而且似乎以一种非常高效、逻辑清晰且富有成效的方式做到了这一点。我对 Docker 的未来以及它协调的功能(或服务)将如何影响组织内的开发、运维和工程团队感到非常兴奋。

User profile image.
Thomas Crowe 是 Red Hat 服务和解决方案管理部门的 IT 现代化高级架构师和 Red Hat OpenStack 平台 (RHOSP) 专家。Thomas 拥有 20 年在每个主要的 Unix 操作系统上构建和改进复杂 IT 基础设施的经验,具有推动高效 IT 现代化和云赋能工作的深度、广度和背景。

7 条评论

Docker,以及更广泛地说... 容器... 确实提供了虚拟化。

我是 OpenVZ 的长期用户,它是 Linux 上一种更早期的容器形式,可以追溯到 2005 年。最初,OpenVZ 使用术语 VE 表示“虚拟环境”。它没有虚拟化硬件,也不是虚拟机,但它虚拟化了环境,因为您的 VE 可以是从合理选择的 Linux 发行版中的任何一个。然后他们从 VE 切换到 VPS,VPS 是虚拟专用服务器的缩写。我想 VPS 试图强调 VPS 具有私有帐户并且主要运行服务器应用程序而不是桌面。然后容器成为首选术语。

在所有这些可能以营销为导向的名称更改中,容器的工作方式并没有真正改变。容器是一组进程,它们与在单个内核上运行的其他进程隔离... 并且能够设置应用于它们的资源限制。在 OpenVZ 的情况下,隔离足够完整,以至于每个容器都可以拥有自己的帐户/用户,包括 root... 它自己的网络堆栈和虚拟化的 pid 空间。因此,容器不是硬件虚拟化,而是操作系统级虚拟化。

在 KVM 的情况下,在主机上运行的所有虚拟机都只是在单个内核上运行的另一个进程... 所以我看来,KVM 是一种 1.5 型虚拟机监控程序。当然,在同一内核下的每个进程中运行的可以是不同的操作系统。

容器仍然是虚拟化。

我完全同意您的观点,容器是一种虚拟化形式。然而,Docker 并不等同于容器。Docker 只是协调已经存在的 Linux 功能,以简化容器的创建。Docker 是一种编排工具,而不是虚拟化工具。这在某种程度上被 libcontainer 的创建和后续使用所掩盖,libcontainer 取代了 Docker 对 LXC 工具的使用。但事实仍然是,Docker “做”的所有事情都可以手动完成,在 Docker 之外完成。

回复 作者: Scott Dowdle

Docker 不提供虚拟化。LXC 提供了虚拟化。我们应该使用的参考框架是 Docker 是 LXC 的标准化打包系统。这很简单,真的。

据推测,在 Docker 0.9 中,他们创建了自己的库 (libcontainer),而 lxc 只是他们的几个可选选项之一... 但我想这取决于您认为 LXC 是什么... 内核功能... 还是用户端库和一些相关工具。

回复 作者: Art C. (未验证)

是 "discrete",不是 "discreet"

也许我们应该对像 Docker、Solaris Containers 和 AIX WPARs 这样的设施使用术语“软”(或软件定义)虚拟化,而对基于虚拟机监控程序的硬件虚拟化使用“硬”虚拟化?

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.