操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。计算机操作系统是随着计算机研究和应用的发展逐步形成并发展起来的,它是计算机系统中最基本的系统软件。操作系统虚拟化,可以理解为将用户的桌面操作系统进行虚拟化,进而归类到桌面虚拟化。
(1)系统级虚拟化
系统虚拟化的核心思想是使用虚拟化软件在一台物理机上,虚拟出一台或多台虚拟机,虚拟机是指使用系统虚拟化技术,运行在一个隔离环境中、具有完整硬件功能的逻辑计算机系统,包括客户操作系统和其中的应用程序。
系统级虚拟化包括一个Hypervisor或者VMM(Virtual Machine Monitor)。Hypervisor是位于硬件资源和操作系统之间的软件层。它使得多个单独的虚拟机实例可以同时运行,并使得多个虚拟机可以共享各种物理硬件资源。Hypervisor协调这些硬件资源(CPU、内存和各种I/O设备)的访问,为虚拟机分配各种需要使用的资源。
对于系统级虚拟化,根据虚拟机监视器Hypervisor或VMM的实现层次主要可以分为基于宿主操作系统的系统级虚拟化和基于硬件的系统级虚拟化。
基于宿主操作系统的虚拟机作为应用程序运行在宿主操作系统(Host OS)之上,其架构如图2-5所示。因此Guest VM需要由Guest OS内核先经过Hypervisor,再经过宿主操作系统才能访问硬件。支持基于宿主操作系统虚拟化的产品有Virtual PC、VMWare Workstation和VirtualBox等。
图2-5 基于宿主操作系统的系统级虚拟化
另外一种系统虚拟化是基于硬件的系统级虚拟化。在这种模式下,如图2-6所示,虚拟机监控层Hypervisor或VMM直接运行在裸机硬件之上。它具有最高的特权,可以直接管理和调用底层的硬件资源。虚拟机监控层向Guest VM提供虚拟的硬件资源,而Guest VM对硬件资源的访问都需要通过这一层。支持基于硬件的系统级虚拟化产品包括VMware ESX/ESXi和Xen等。
(www.xing528.com)
图2-6 基于硬件的系统级虚拟化
事实上,上述这种按照Hypervisor的实现层次的分类对于某些虚拟化产品并不能很直接地确定其分类,比如KVM和Hyper-V。KVM实现成为Linux的一个内核模块。对其是属于基于宿主操作系统的还是属于基于硬件的虚拟化产品还存在一些争论。另一个例子就是微软的Hyper-V,它被误认为是基于宿主操作系统的虚拟化产品。但是它2008的免费版本和其他一些版本采用的实际上是基于硬件的系统级虚拟化,Hypervisor在管理操作系统之前加载,并且任何虚拟机都是在Hypervisor上创建并运行的,而非通过管理操作系统,因此应该属于基于硬件的系统级虚拟化。
(2)Docker
Docker是操作系统级别的轻量级虚拟化技术,也就是实现轻量级的操作系统虚拟化。它能够让应用的分发、部署和管理都变得前所未有的高效和轻松。同时它也是一个用go语言实现的开源项目,源代码在github上。
Docker也是一个开源的应用容器引擎,它可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何Linux发行版本的机器上。Docker基于LXC(Linux Container)来实现类似VM的功能,可以在更有限的硬件资源上提供给用户更多的计算资源。与VM等虚拟化的方式不同,LXC不属于全虚拟化或半虚拟化中的任何一个分类,而是一个操作系统级虚拟化。
Docker可以看作是直接运行在宿主操作系统之上的一个容器,使用沙箱机制完全虚拟出一个完整的操作,容器之间不会有任何接口,从而让容器与宿主机之间、容器与容器之间隔离的更加彻底。每个容器会有自己的权限管理,独立的网络与存储栈,以及自己的资源管理,从而使同一台宿主机上可以友好的共存多个容器。
Docker借助Linux的内核特性,如:控制组(Control Group)、命名空间(Namespace)等,直接调用操作系统的系统调用接口。从而降低每个容器的系统开销,降低容器复杂度,实现启动快、资源占用小等特征。
在传统操作系统中,所有用户的进程本质上是在同一个操作系统的环境下运行,因此内核或应用程序的缺陷可能影响到其他进程,也可能受其他进程的影响。而Docker是一种在服务器操作系统中使用的轻量级的虚拟化技术,内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程,不同实例中的进程完全不了解对方的存在。它并不是在物理系统里创建多个虚拟机环境,也就是多个操作系统,而是让一个操作系统创建多个彼此独立的应用环境,这些应用环境都访问同一个内核。
传统的虚拟化技术要生成一个环境的时间非常久,但对于Docker来说启动和销毁一个操作系统环境都是秒级的,而且它底层依赖的技术lxc(linux container)完全是内核特性,没有任何中间层开销,对于资源的利用率极高,性能接近物理机。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。