美文网首页
003_Docker容器和VM虚拟机的区别

003_Docker容器和VM虚拟机的区别

作者: AI秘籍 | 来源:发表于2022-01-24 00:05 被阅读0次

    1. 摘要

    各种虚拟机技术开启了云计算时代;而Docker作为下一代虚拟化技术,正在改变我们开发、测试、部署应用的方式。那虚拟机与Docker究竟有何不同呢?

    一句话总结:虚拟机隔离性能好,启动慢;docker启动快,隔离性能相对差一些,方便应用的开发、测试、部署。

    这都是他们的架构设计决定的,以及目的功能侧重不同决定的,但功能很相似。

    image.png

    2. 理解VM虚拟机

    虚拟机:虚拟化硬件。

    虚拟机 Virtual Machine 定义,指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。

    在容器技术之前,业界的网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。

    服务****虚拟****化****解决的核心问题是资源调配

    image.png

    3. 理解Docker容器

    3.1 Docker容器不是虚拟机。但初学者会把它比做一种轻量级的虚拟机。这样做无可厚非,因为Docker最初的成功秘诀,正是它比虚拟机更节省内存,启动更快。Docker不停地给大家宣传,“虚拟机需要数分钟启动,而Docker容器只需要50毫秒”。但是Docker容器并非虚拟机。

    3.2 容器:将操作系统层虚拟化,是一个标准的软件单元。

    其特点如下:

    (2)随处运行:容器可以将代码与配置文件和相关依赖库进行打包,从而确保在任何环境下的运行都是一致的。

    (2)高资源利用率:容器提供进程级的隔离,因此可以更加精细地设置 CPU 和内存的使用率,进而更好地利用服务器的计算资源。

    (3)快速扩展:每个容器都可作为单独的进程予以运行,并且可以共享底层操作系统的系统资源,这样一来可以加快容器的启动和停止效率。

    容器解决的核心问题是应用开发、测试和部署

    image.png

    3.3 docker特点

    (1)上手快

    Docker依赖于写时复制(copy-on-write)模型,使修改应用程序也非常迅速。大多数 Docker 容器只需要不到 1 秒中即可启动。由于去除了管理程序的开销,Docker 容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。

    (2)职责的逻辑分类

    使用Docker开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(上线后出了问题就归结为肯定是运维的问题)”。

    (3)快速高效的开发生命周期

    Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。

    (4)鼓励使用面向服务的架构

    Docker 还鼓励面向服务的体系结构和微服务架构。Docker 推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。

    4. 虚拟机vs Docrker

    image.png

    (1)从VM与Docker框架中,直观上VM多了一层Guest OS,同时Hypervisor会对硬件资源进行虚拟化,docker直接使用硬件资源,所以资源利用率相对docker低。

    (2)openstack能够以10台/min的速度创建虚拟机,在docker面前就弱爆了,因为docker是利用宿主机的系统内核,所以可以做到在几秒钟之内创建大量容器,它们的启动速度是在数量级上的差距。Docker的每个隔离环境是进程级的,每个守护进程共用操作系统内核,在隔离环境中打包运行服务必要的依赖。因此每个容器启动非常快,且占用的资源非常少,非常适合用在服务器上部署后台服务。

    (3)Docker有着小巧、迁移部署快速、运行高效等特点,但隔离性比服务器虚拟化差;

    (4)虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。而Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

    服务器虚拟化解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署。

    (5)VM在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,再安装应用;Docker容器在宿主机器的操作系统上创建Docker引擎,直接在宿主主机的操作系统上调用硬件资源。

    (6)虚拟机虽然可以隔离出很多「子电脑」,但占用空间更大,启动更慢。虚拟机软件可能还要花钱,例如 VMWare。容器技术不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境,类似「沙箱」。运行空间,虚拟机一般要几 GB 到 几十 GB 的空间,而容器只需要 MB 级甚至 KB 级。

    image.png

    (6)虚拟机的 Hypervisor 创建了一个非常牢固的边界,以防止应用程序突破它,而容器的边界不那么强大。

    原文链接:
    Docker容器和VM虚拟机的区别 - 知乎 (zhihu.com)
    Docker容器和VM虚拟机的区别 (qq.com)

    相关文章

      网友评论

          本文标题:003_Docker容器和VM虚拟机的区别

          本文链接:https://www.haomeiwen.com/subject/qnduhrtx.html