如果你不介意只使用一种操作系统的话,那么和传统的hypervisor相比,基于容器的虚拟化能够提供更高的效率与性能。
基于容器的虚拟化使用单个内核运行一个操作系统的多个实例。每个实例在一个完全隔离的环境中运行,因此不存在一个容器访问另一个容器中文件这样的风险。因此,基于容器的虚拟化是安全的。
而且这种虚拟化方式的资源使用效率也是非常高的,因为所有的容器都运行在同一个内核上。但是这种方式同样存在弊端:只有一个内核意味着无法选择其他的操作系统。在对虚拟化方式进行评估时,了解它们之间的差异以及每种虚拟化方式的优势是非常重要的。
基于容器的虚拟化与hypervisor的差异
hypervisor与基于容器的虚拟化存在一些不同之处。首先,基于hypervisor的虚拟化,其每个虚拟机都需要安装一个完整的操作系统,这当然包括内核。这一需求使得基于hypervisor的虚拟化相当厚重但也非常灵活。因为每个虚拟机都有自己的内核,所以hypervisor只需要协调虚拟机访问硬件设备。因此,你可以安装任何操作系统,而且它们都是在完全隔离的环境中运行的。
另一方面,在基于容器的虚拟化环境中,虚拟机与硬件的关系更紧密,因为所有的虚拟机都使用同一个内核,不再需要hypervisor.流行的基于容器的虚拟化运行在Windows内核(使用Parallels Virtuozzo虚拟化容器时)或者Linux内核之上。由于Linux内核具备开放性以及灵活性,所以在多数情况下基于容器的虚拟化通常使用Linux内核。而且可以使用很多开放以及免费的解决方案。
通常企业不会使用基于容器的虚拟化,他们偏爱hypervisor使用多种操作系统。但是基于容器的虚拟环境是虚拟主机提供商的一个理想选择。基于容器的虚拟化为用户提供了一种高效、安全的运行服务的方式。
为简化虚拟机的维护,虚拟主机提供商力图为所有的虚拟机提供相同的操作系统。例如,只需要升级物理服务器的Linux内核,就完成了运行在该物理服务器上的数百台虚拟机的内核升级工作。如果最先考虑的是实现效率的最大化而不是在不同的操作系统之间进行选择,而且要使用影响更为深远的方式(比如cgroups)对性能进行优化,那么基于容器的虚拟化是一种理想的解决方案。
Linux LXC为基于容器的虚拟化提供了便利
LXC是最新的Linux附加产品之一,它天生就能创建基于容器的虚拟化解决方案。LXC基于chroot和所谓的chroot jail.允许在单个内核之上运行彼此隔离的虚拟机。但是LXC并没有完全复制chroot jail--实际上只需要二进制文件、库文件以及配置文件。同样,可以对单个虚拟机进行最大化的精简。
Linux容器虚拟化另一项重大的改进就是使用了cgroups.cgroups可以在内核级别创建资源组,而且你可以指定这些资源的优先级。这样,你就可以确保所有的虚拟机恰好具备它所需要的资源。
基于容器的虚拟化的上述两个方面创建了一个非常高效的环境,正是在这个高效的环境中同一个操作系统的多个实例可以提供您的用户使用。