一个虚拟机(VM)是许多虚拟化技术相当的总称。
虚拟化技术有很多变体,但主要有:
qemu-kvm
并且VMWare
是第一个示例。他们使用管理程序来管理运行完整操作系统的虚拟环境。例如,在qemu-kvm
系统上,您可以使一个VM运行FreeBSD,另一个VM运行Windows,另一个VM运行Linux。
这些技术创建的虚拟机对于来宾而言就像孤立的单个计算机一样。这些都有一个虚拟的CPU,RAM,NIC,图形等,客人认为这是真正的文章。因此,可以在VM上安装许多不同的操作系统,并且它们“开箱即用”地工作,而无需修改。
尽管这非常方便,但是许多操作系统无需费劲即可安装,但它的缺点是虚拟机管理程序必须模拟所有硬件,这会降低速度。另一种选择是半虚拟化硬件,其中为来宾开发了一个新的虚拟设备和驱动程序,旨在在虚拟环境中提高性能。 为此qemu-kvm
提供virtio
设备和驱动程序的范围。不利的一面是必须支持客户操作系统。但是如果得到支持,性能收益将是巨大的。
lxc
是操作系统级别虚拟化或容器的示例。在此系统下,仅安装了一个内核-主机内核。每个容器只是用户区进程的隔离。例如,Web服务器(例如apache
)安装在容器中。就该Web服务器而言,唯一安装的服务器就是它自己。另一个容器可能正在运行FTP服务器。该FTP服务器不知道Web服务器的安装-只有它自己的。另一个容器可以包含Linux发行版的完整userland安装(只要该发行版能够与主机系统的内核一起运行)。
但是,在使用容器时,没有单独的操作系统安装,仅是单独的Userland服务实例。因此,您不能在容器中安装其他平台-Linux上没有Windows。
通常使用来创建容器chroot
。这/
将为要使用的进程创建一个单独的私有根()。通过创建许多单独的私有根,进程(Web服务器或Linux发行版等)在它们自己的隔离文件系统中运行。更高级的技术,例如cgroups
可以隔离其他资源,例如网络和RAM。
关于哪种方法最好,长期辩论都各有利弊。
- 容器较轻,因为没有为每个容器安装完整的操作系统。管理程序就是这种情况。因此,它们可以在规格较低的硬件上运行。但是,它们只能运行Linux guest虚拟机(在Linux主机上)。另外,由于它们共享内核,因此受损容器有可能影响另一个容器。
- 虚拟机管理程序更加安全,并且可以运行不同的操作系统,因为每个VM中都安装了完整的操作系统,而来宾系统不知道其他VM。但是,这会在主机上利用更多的资源,该资源必须相对强大。