什么是 Linux 容器和 Linux 虚拟机管理程序?

什么是 Linux 容器和 Linux 虚拟机管理程序?

我查看了 stackexchange 网站,但找不到任何内容。我查看了有关 Linux 容器的维基百科条目https://en.wikipedia.org/wiki/LXC以及虚拟机管理程序https://en.wikipedia.org/wiki/Hypervisor但对两者的解释超出了没有从事过其中任何一个工作的人所能理解的范围。我也看到了http://www.linux.com/news/enterprise/cloud-computing/785769-containers-vs-hypervisors-the-battle-has-just-begun但这也无法解释它。

我玩过虚拟机,比如 virtualbox。以我有限的理解而言,最初的想法之一可能是虚拟机可能是在沙箱环境中测试软件(当您无法购买/负担得起机器并且仍然了解您正在开发的软件时,拥有一个 Solaris 盒子)因为目标硬件正在工作。)虽然它的使用受到限制。这可能也是它在云计算领域取得飞跃的方式之一。问题很广泛,所以这就是我如何提炼它的 -

有人可以解释一下虚拟机管理程序和 *nix 容器是什么(如果可能的话进行类比)?
*nix 虚拟机管理程序与虚拟机相同还是有区别?

答案1

A虚拟机(VM) 是许多虚拟化技术的通用术语。

虚拟化技术有很多变体,但主要是:

  • 硬件级虚拟化
  • 操作系统级虚拟化

qemu-kvmVMWare是第一个的例子。他们使用虚拟机管理程序来管理运行完整操作系统的虚拟环境。例如,在一个qemu-kvm系统上,您可以让一个虚拟机运行 FreeBSD,另一个虚拟机运行 Windows,另一个虚拟机运行 Linux。

对于来宾来说,由这些技术创建的虚拟机就像隔离的单独计算机一样。它们有虚拟的CPU、RAM、NIC、显卡等,客人认为这些都是正品。因此,虚拟机上可以安装许多不同的操作系统,并且它们“开箱即用”,无需修改。

虽然这非常方便,因为许多操作系统无需太多努力即可安装,但它有一个缺点,即虚拟机管理程序必须模拟所有硬件,这可能会减慢速度。另一种选择是半虚拟化硬件,其中为客户开发了新的虚拟设备和驱动程序,旨在提高虚拟环境中的性能。 为此qemu-kvm提供一系列设备和驱动程序。virtio这样做的一个缺点是必须支持来宾操作系统;但如果支持的话,性能优势是巨大的。


lxc是操作系统级虚拟化或容器的一个示例。在这个系统下,只安装了一个内核——主机内核。每个容器只是用户态进程的隔离。例如,一个Web服务器(例如apache)安装在容器中。就该网络服务器而言,唯一安装的服务器就是它自己。另一个容器可能正在运行 FTP 服务器。该 FTP 服务器不知道 Web 服务器的安装 - 只知道它自己的安装。另一个容器可以包含 Linux 发行版的完整用户空间安装(只要该发行版能够与主机系统的内核一起运行)。

但是,使用容器时没有单独的操作系统安装 - 只有用户级服务的隔离实例。因此,您无法在容器中安装不同的平台 - Linux 上不能安装 Windows。

容器通常是使用chroot.这会创建一个单独的私有根 ( /) 供进程使用。通过创建许多单独的私有根,进程(Web 服务器或 Linux 发行版等)在它们自己的隔离文件系统中运行。更先进的技术,例如cgroups可以隔离网络和 RAM 等其他资源。


两者各有优缺点,关于哪一种最好的争论也有很多长期的争论。

  • 容器更轻,因为不需要为每个容器安装完整的操作系统;虚拟机管理程序就是这种情况。因此它们可以在较低规格的硬件上运行。但是,它们只能运行 Linux 来宾(在 Linux 主机上)。此外,由于它们共享内核,因此受损的容器可能会影响另一个容器。
  • 虚拟机管理程序更加安全,并且可以运行不同的操作系统,因为每个虚拟机中都安装了完整的操作系统,并且来宾不知道其他虚拟机。然而,这会占用主机上更多的资源,因此主机必须相对强大。

答案2

容器有点像chroot 环境但它实现了更完全的用户空间隔离。它不提供真正的VM,而是提供虚拟操作系统。虚拟机创造了多台机器的错觉,每台机器中都有一个真实、完整的操作系统,就像在裸机上一样运行。这里的“完整的操作系统”包括内核。一些虚拟机(例如QEMU)甚至允许刺激不同类型的“裸机”架构。

相反,容器创建了多个内核的假象,每个内核都运行一个完整的用户空间。例如,您可以在一个容器中运行 Debian,在另一个容器中运行 Arch,因此容器内的视角与虚拟机非常相似。但是,您只能运行与一个实际内核(在本例中为 Linux)兼容的操作系统用户区。这与真实的虚拟机不同,在真实的虚拟机中,您可以运行独立的内核,因此可以运行任何类型的操作系统。

因此,真正的虚拟机在资源方面比容器更昂贵;如果您不需要在每个虚拟机中使用不同的内核,您不妨使用容器。

还有其他虚拟化系统可以执行与 LXE 类似的操作,例如开放VZ,被VPS厂商广泛使用。 openVZ VPS 是一个独立的用户空间,使用其主机操作系统的内核。这就是为什么此类 VPS 具有多种 Linux 风格,但仅此而已;它们必须与主机内核兼容。

OpenVZ和LXC风格的虚拟化被称为操作系统级虚拟化

A管理程序是管理虚拟机的系统,例如虚拟盒子、QEMU 或Xen。一些虚拟机管理程序(例如 Xen)在裸机上运行,​​不需要主机操作系统(尽管它们可能需要托管操作系统作为控制接口)。其他的,例如 VirtualBox 和 QEMU,在主机操作系统内运行。有些,例如 QEMU,允许模拟不同的机器架构;其他的,例如 VirtualBox,则不然(即,VM 架构始终与真实主机相同)。模拟架构需要更多资源,就像真实的虚拟机比容器需要更多资源一样。

Hypervisor 风格的虚拟化被称为平台级虚拟化

相关内容