docker容器与虚拟机有什么区别?

鼓励师提问于 2018-01-20 09:20
1 个回答
  • Tony2018-01-20 21:04

    这个问题可以延伸到容器和虚拟机的区别。虽然Docker在技术圈大红大紫已经两年多,这个技术在企业生产环境中发挥的作用还可以更多、更大。



    容器技术有很多种,Docker是目前最流行的一种,网易云也在使用Docker。服务器虚拟化解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署



    虚拟机技术通过Hypervisor层抽象底层基础设施资源,提供相互隔离的虚拟机,通过统一配置、统一管理,计算资源的可运维性,以及资源利用率都能够得到有效的提升。同时,虚拟机提供客户机操作系统,客户机变化不会影响宿主机,能够提供可控的测试环境,更能够屏蔽底层硬件甚至基础软件的差异性,让应用做到的广泛兼容。然而,再牛逼的虚拟化技术,都不可避免地出现计算、IO、网络性能损失,毕竟多了一层软件,毕竟要运行一个完整的客户机操作系统。



    容器技术严格来说并不是虚拟化,没有客户机操作系统,是共享内核的。容器可以视为软件供应链的集装箱,能够把应用需要的运行环境、缓存环境、数据库环境等等封装起来,以最简洁的方式支持应用运行,轻装上阵,当然是性能更佳。Docker镜像特性则让这种方式简单易行。当然,因为共享内核,容器隔离性也没有虚拟机那么好。



    但是,更重要的是,通过Docker的特性,以容器化封装为基础,企业就可以很好地实现云原生(向云而生的架构),包括大家听得耳朵都起茧子的微服务架构、DevOps,让开发团队可以从苦逼的运维工作中解脱,让应用快速上线、快速迭代。微服务架构下,将系统拆分成多个服务,每个部分都可以独立开发测试部署,同时我们也可以只扩展需要扩展的部分,也就是变一个三头六臂的哪吒,而不是总要变三个孙悟空。微服务如何设计,基于容器的规模部署、高可用如何实现等,是另外的问题了。对云原生内容感兴趣的朋友,可以参考《云原生应用架构》这篇综述文章。





    所以说,虚拟机和容器被大家比较,主要是在于它们都提供隔离环境的相似性,但相似仅此而已,它们各有各的应用场景,如何选择还是要看根据具体的业务需求,包括业务成长预期。



    以网易云为例,针对不同的应用场景,网易云提供虚拟机(云主机),也提供容器。云主机主要是以成熟的虚拟机技术来满足传统业务云化的需求。网易云对于容器技术的应用,一方面,以虚拟机+容器的方式,兼顾轻量级的应用弹性和多租户隔离,支持DevOps、微服务和云原生——当然,为了保证容器的性能,真正做到轻量级,网易云在底层做了很多优化工作;另一方面,以裸金属容器技术,为客户提供性能损失最小的超级容器,这种方案会损失一定的租户隔离性。不过,对安全性要求很好的用户,可以通过专属云([部署在网易公有云内独占资源的可用区])的形式来弥补。



    回到题主的三个问题,是把两种技术在资源层面进行比较,在优化技术都合格的情况下,确实可以更快地实现资源的弹性扩展,但实现的弹性伸缩,也只是资源层面的弹性伸缩。