说起服务器虚拟化这一议题(当然,这也正是本文的讨论核心),大家不可避免地会将意见紧紧围绕在VMware、Hyper-V这一核心身边,而相对弱势的Xen与KVM也经常会被提及。然而如今一匹黑马以雷霆万钧之势杀入这一领域,并与众位传统巨头厮杀个不可开交——这就是Docker。
既然说到了Docker,我们自然需要首先从容器技术入题——这一机制与原本基于虚拟机管理程序的服务器虚拟化方案略有不同。不过将应用程序封装在操作环境下的单一容器当中,确实能够带来诸多等同于利用虚拟机系统载入并运行应用程序的优势:二者都能顺利由任何适合的物理设备加以承载,而且其运行完全无需考虑任何依赖性或者其它限制性前提。
当然,Docker与VMware解决方案之间的关键性差异在于,Docker是一套基于Linux且使用LXC的系统——所谓LXC是一套用户空间接口,专门针对Linux内核中所包含的功能。
LXC的目标在于创建一套尽可能与标准Linux安装版本相一致的环境,但却无需使用独立的内核体系。正如linuxcontainers.org网站上的表述:“LXC通常被视为某种中间点,介于增强性chroot与高成熟度虚拟机系统之间。”
由于Docker的构建立足于LXC之上,因此其只适用于Linux环境(例如RHEL 7与Ubuntu 14.04服务器版本)而且只能运行Linux应用程序。有鉴于此,大家可以彻底放弃利用其运行Windows系统应用或者其它能够在常见虚拟机管理程序上顺利运行的操作系统应用的念头。
二者之间的另一大关键性差异在于,相较于过去自身充当独立系统的虚拟化方案,Docker容器事实上选择了Linux内核共享的处理方式——该内核源自运行在主机设备上的单一操作系统。具体而言,运行在同一台主机设备上的多套容器全部共享同一套Linux内核。该操作系统中的共享部分处于只读状态,但不同容器却拥有自己的可写入部分。
进一步了解容器机制的优势所在
那么与经过长时间发展而早已成熟的服务器虚拟化技术相比,新近涌现的容器机制到底拥有哪些优势?面对条件有别的实际情况,我们又应该如何在二者之间做出取舍?
容器机制的核心优势之一在于,用户可以在一台主机设备上运行更多套容器体系、具体数量高于虚拟机系统。其原理相信大家不难理解,由于每套虚拟机本身就是一个独立的系统,因此需要为其操作系统及虚拟化硬件外加其它特殊功能分配专有资源。如果每套虚拟机系统的大小为10Gb,那么十套虚拟机系统的总体积就是10 x 10 = 100Gb——资源总和属于纯粹的累加关系。
然而如果将十套甚至上百套10Gb容器共同运行,大家也远远用不上100Gb这样规模的资源总和。理由很简单,所有容器都共享着同样一部分资源,这就彻底避免了资源重复分配所带来的严重浪费。
实际上,所有容器所共享的只有一套操作系统(更严格地讲,应该是一套系统内核)。整套容器体系内不存在任何虚拟硬件部分——而只是一点点应用程序外加其操作环境。这就意味着,即使在同一台主机之上,大家能够运行的容器数量也要远远超过完整的虚拟机系统。
采取这种内核及其它资源共享的处理方式还能带来其它附加成效,具体来讲,这能让各容器在不到一秒钟的时间内启动完毕。相比之下,虚拟机系统就完全不具备这样的优势,因为它由开启到能够正常运行的过程需要等等整套虚拟系统的启动、且具体时长往往达到数分钟甚至更多。
Canonical公司(Ubuntu系统赞助商)CEO Mark Shuttleworth则一再重申了这种速度优势所带来的实际效益。“Canonical公司为用户提供内核及用户空间起效承诺,保证其能够支持大家创建出实际效果与虚拟机相等同的容器体系,而且即使是普通的非root用户、也能在该系统中获得与虚拟机root用户相媲美的体验。与KVM相比,不仅速度更快、而且体积更小巧,”他解释称。
除此之外,其它优势更是不胜枚举。举例来说,大家可以在AWS以及Azure公有云环境下运行Docker容器,此外容器也更容易进行共享。这些特性对于测试及开发团队而言就显得尤为重要——同时也是Docker最常被提及、也是最受推崇的潜在优势之一。
容器机制目前还不足以成为完整服务器虚拟化方案的替代品
不过VMware及其它虚拟机方案供应商尚不必太过忧虑,因为目前的容器机制还不足以成为完整服务器虚拟化方案的替代品——至少就当下来看是如此。