虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化技术是一套解决方案。完整的情况需要CPU、主板芯片组、BIOS和软件的支持,例如VMM软件或者某些操作系统本身。即使只是CPU支持虚拟化技术,在配合VMM的软件情况下,也会比完全不支持虚拟化技术的系统有更好的性能。
全虚拟化(Full Virtualization)
全虚拟化也成为原始虚拟化技术,该模型使用虚拟机协调guest操作系统和原始硬件,VMM在guest操作系统和裸硬件之间用于工作协调,一些受保护指令必须由Hypervisor(虚拟机管理程序)来捕获处理。全虚拟化的运行速度要快于硬件模拟,但是性能方面不如裸机。
半虚拟化(Para Virtualization)
半虚拟化是另一种类似于全虚拟化的技术,它使用Hypervisor分享存取底层的硬件,但是它的guest操作系统集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。半虚拟化需要guest操作系统做一些修改,使guest操作系统意识到自己是处于虚拟化环境的,但是半虚拟化提供了与原操作系统相近的性能。
KVM是指基于Linux内核(Kernel-based)的虚拟机(Virtual Machine)。也有人将KVM架构分解为两部分:KVM驱动,即linux kernel的一个模块和Qemu,即用于模拟虚拟机的用户空间组件,提供I/O设备模型,访问外设的途径。KVM最大的好处就在于它是与Linux内核集成的,所以速度很快。KVM的宿主操作系统必须是Linux,支持的客户机操作系统包括Linux、Windows、Solaris和BSD,运行在支持虚拟化扩展的x86和x86_64硬件架构上,cpu支持VT技术。KVM是一套虚拟化解决方案,不过因为这个方案实际上只实现了内核中对处理器(Intel VT, AMDSVM)虚拟化特性的支持,它缺乏设备虚拟化以及相应的用户空间管理虚拟机的工具,而Qemu是一套独立的虚拟化解决方案,KVM借用了QEMU的代码并加以精简,连同KVM一起构成了另一个独立的虚拟化解决方案,不妨称之为:KVM+QEMU。
Xen是另一套独立的虚拟化解决方案,最初的Xen只支持半虚拟化,Intel VT技术出现后,添加了全虚拟化功能,这个全虚拟化功能也是借助了qemu实现,但不是完全依赖qemu。Xen是一个开放源代码虚拟机监视器,由剑桥大学开发。Xen的缺点是操作系统必须进行显式地修改(“移植”)以在Xen上运行(但是提供对用户应用的兼容性),所以比较麻烦。使得Xen无需特殊硬件支持,就能达到高性能的虚拟化。Linux的官方内核在较早之前已经去掉了对Xen的支持。
VMWare (Virtual Machine ware)是一个“虚拟PC”虚拟机管理软件。它的产品可以使你在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。与“多启动”系统相比,VMWare采用了完全不同的概念。多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Windows应用程序那样切换。而且每个操作系统你都可以进行虚拟的分区、配置而不影响真实硬盘的数据,你甚至可以通过网卡将几台虚拟机用网卡连接为一个局域网,极其方便。安装在VMware操作系统性能上比直接安装在硬盘上的系统低不少,因此,比较适合学习和测试。
KVM、Xen、VMWare的对比如下表所示
是否开源 是否免费 性能 优点 缺点
KVM 是 是 高 1.KVM是内核本身的一部分,因此可以利用内核的优化和改进。2.高性能, 稳定, 无需修改客户机系统。3.开源、免费
XEN 是 是 高 1.性能较好。2.开源、免费 操作复杂,维护成本较高,目前已被RedHat抛弃
VMWare 否 否 一般 相对比较成熟的商业软件,市场占有率较大 不开源,需要付费
所有的应用程序都有自己的依赖关系,其中包括软件和硬件资源。 Docker是开发者的开放平台,通过将每个应用程序打包到容器中来隔离依赖关系。容器就像是轻量级的虚拟机,可以扩展到成千上万的节点,通过在不同虚拟环境中运行相同应用程序来帮助提升云的可移植性。虚拟机广泛用于云计算,通过使用虚拟机来实现隔离和资源控制。 虚拟机使用自己的内存管理加载完整的操作系统,使应用程序更加高效和安全,同时确保其高可用性。
Docker容器与虚拟机有什么不同?
虚拟机具有完整的操作系统,其自身的内存管理通过相关的虚拟设备进行支持。 在虚拟机中,为用户操作系统和虚拟机管理程序分配有效的资源,从而可以在单台计算机(或主机)上并行运行一个或多个操作系统的多个实例。 每个客户操作系统都作为主机系统中的单个实体运行。
另一方面,Docker容器是使用Docker引擎而不是管理程序来执行的。 因此容器比虚拟机小,并且由于主机内核的共享,可以更快地启动,具有更好的性能,更少的隔离和更好的兼容性。 Docker容器能够共享一个内核并共享应用程序库,因此容器比虚拟机具有更低的系统开销,只要用户愿意使用单一平台来提供共享的操作系统,容器可以更快,更少资源。虚拟机可能需要几分钟才能创建并启动,而只需几秒钟即可创建并启动一个容器。与在虚拟机中运行应用程序相比,容器中包含的应用程序提供了卓越的性能。
Docker容器比虚拟机弱的一个关键指标就是“隔离”。英特尔的VT-d和VT-x技术为虚拟机提供了ring-1硬件隔离技术,因此虚拟机可以充分利用它的优势。它可以帮助虚拟机器高效使用资源和防止相互干扰。 Docker容器还没有任何形式的硬件隔离,因此它们容易受到攻击。
如何进行进行选择?
选择容器还是虚拟机依赖于应用程序如何设计。 如果应用程序旨在提供可伸缩性和高可用性,那么容器是最好的选择,否则应用程序可以放置在虚拟机中。对于高I/O要求的业务,例如数据库服务,建议部署Docker+物理机,因为在虚拟机中部署Docker,I/O性能将受到虚拟机的限制。对于虚拟桌面服务等强调租户权限和安全的业务,建议采用虚拟机方式,虚拟机的多租户强隔离特性,保证租户在拥有虚机root权限的同时,其他租户和主机的安全。
或者更好的选择是混合方案,运行在虚拟机中的容器。 Docker容器可以在虚拟机内部运行,虚拟机并为它们提供经过验证的隔离,安全属性,移动性,动态虚拟网络等。为实现安全隔离和资源的高利用率,基本应该遵循:不同租户的业务运行采用虚拟机隔离,相似类型的业务部署在同一组容器上的思路。
结论
Docker容器正在成为DevOps环境中的一个重要工具。 DevOps领域内的Docker Containers的用例非常多。在Docker容器上运行应用程序,然后在任何地方部署(Cloud或内部部署或任何Linux的风格)现在都已成为现实。
在异构环境中工作,虚拟机提供了高度的灵活性,而Docker容器主要关注应用程序及其依赖关系。Docker Containers允许通过使用每个云的虚拟机环境来处理云,从而轻松移植跨云的应用程序堆栈。这代表了一个有用的功能,在没有Docker Containers的情况下,必须以更加复杂和乏味的方式来实现。这里阐述的并不是关于放弃虚拟机,而是在必要时除了虚拟机之外,根据实际情况使用Docker容器,不认为Docker容器可以完全清除虚拟机。
参考:https://www.cnblogs.com/tongxiaoda/p/8559259.html
https://www.cnblogs.com/josie-xu/p/10411736.html
https://blog.csdn.net/peterwanghao/article/details/78561803