容器与虚拟机究竟有何本质上的差异?

容器

虚拟化技术已经改变了现代计算方式,它能够提升系统资源使用效率、消除应用程序和底层硬件之间的依赖关系,同时加强负载的可以移植性和安全性,但是hypervisor和虚拟机只是部署虚拟负载的方式之一。作为一种能够替代传统虚拟化技术的解决方案,容器虚拟化技术凭借其高效性和可靠性得到了快速发展,它能够提供新的特性,并且帮助数据中心专家解决新的顾虑。

容器和虚拟机之间的主要区别在于虚拟化层的位置和操作系统资源的使用方式。

虚拟机依赖于hypervisor,其通常被安装在“裸金属”系统硬件之上,这导致hypervisor在某些方面被认为是一种操作系统。一旦 hypervisor安装完成, 就可以从系统可用计算资源当中分配虚拟机实例了,每台虚拟机都能够获得唯一的操作系统和负载(应用程序)。

通常,第一台虚拟机都将会被用来运行系统管理程序,比如Microsoft System Center。而之后的虚拟机可能包含其他企业负载,比如数据库、ERP、CRM、邮件服务器、媒体服务器、web服务器或者其他业务应用。虚拟机之间是完全隔离的——没有任何一台虚拟机知道(或者依赖)相同系统当中的另外一台虚拟机的存在——恶意软件、应用程序崩溃和其他问题只能影响一台虚拟机。虚拟机从一个虚拟系统被移动到另外一个当中,而不用考虑系统硬件和操作系统等因素。

而容器环境的工作方式则有所不同。对于容器环境来说,需要首先安装主机操作系统,之后将容器层(比如LXC或libcontainer)安装在主机操作系统(通常是Linux变种)之上。在安装完容器层之后,就可以从系统可用计算资源当中分配容器实例了,并且企业应用可以被部署在容器当中。但是,每个容器化应用都会共享相同的操作系统(单个主机操作系统)。

相比于虚拟机,容器拥有更高的资源使用效率,因为它并不需要为每个应用分配单独的操作系统——实例规模更小、创建和迁移速度也更快。这意味相比于虚拟机,单个操作系统能够承载更多的容器。云提供商十分热衷于容器技术,因为在相同的硬件设备当中,可以部署数量更多的容器实例。然而,单个操作系统有可能引起影响所有相关实例的单点事故。比如,恶意软件或者主机操作系统崩溃可能禁用或者影响所有容器。此外,容器易于迁移,但是只能被迁移到具有兼容操作系统内核的其他服务器当中,这样会无形中减少迁移选择。

从实际应用的角度来说,容器和虚拟机可以在同一个数据中心当中共存,因此这两种技术被认为是互补的——为现代应用程序架构师和数据中心管理员添加了可用工具集,通过不同的方式为应用负载提供支持。