1.Docker容器与虚拟机有什么区别

    1.1 虚拟机

       虚拟机:虚拟机是目前在IT架构中运用最广泛的一种虚拟化技术,它的目的主要是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,并且提高服务器的利用率。看一下虚拟机的架构图:

Docker容器与虚拟机有什么区别?_虚拟操作系统

                                                             图片借鉴自:https://www.jianshu.com/p/50f48eb25215

       Infrastructure:为基础设施,他可以是个笔记本电脑,也可以是一个服务器机柜,还可以是一个云主机。

       Host Operating System:为主机的物理操作系统,是管理计算机硬件与软件资源的计算机程序。

       Hypervisor:为虚拟机监视器,是一种运行在基础物理服务器和虚拟操作系统间的中间软件层,可允许多个虚拟操作系统和应用共享硬件。

       Guest OS:虚拟操作系统,虚拟机内部运行的操作系统。

       Bins/Libs:具体的二进制文件和库文件,保存一些工具和用户空间的库。

       APP:用户应用程序。

     1.2 Docker

       Docker:是一个应用容器引擎,让开发者可以打包应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Window机器上,也可以实现虚拟化。我们再来看一下Docker的架构图:

Docker容器与虚拟机有什么区别?_虚拟操作系统_02

       可以看到Docker和虚拟机的区别在于,Docker没有Hypervisor(虚拟机监视器)这一层,因为Docker本身就是一个系统级的虚拟化技术,所以它要基于已有的操作系统去安装。

     1.3 对比图表

比对项 Container(容器) VM(虚拟机)
启动速度 秒级 分钟级
运行性能 接近原生 有所损失
磁盘占用 MB GB
数量 成百上千 一般几十台
隔离性 进程级别 系统级别
操作系统 只支持Linux 几乎所有
封装程度 只打包项目代码和依赖关系,共享宿主机内核 完整的操作系统

    (1)启动速度:因为VM是一个完整的操作系统包括硬件和内核,所以它是一个重量级的系统;而容器是轻量级的,因为容器只打包了操作系统的基础文件和库文件、还有应用程序及所有的依赖,他的运行速度就好比在一台机器上创建一个进程一样,所以启动速度较快。

    (2)运行性能:由于VM增加了Hypervisor层用于虚拟化硬件,势必会增加一定的开销,所以运行性能有所损失;而容器是直接运行在物理操作系统上的,他本身与系统上其他进程并没有太大区别,所以运行性能是接近原生的。

    (3)磁盘占用:VM是一个完整的操作系统,所以为GB级别的;而容器只包含了一些系统启动的必要组件和程序依赖,所以是MB级别的。

    (4)数量:不用多说,运行一个操作系统的开销和运行一个进程的开销对比很明显。

    (5)隔离性:虚拟机是一个完整的操作系统级别的隔离,要比容器好很多;容器是进程级别的隔离,隔离的不彻底,因为多个容器之间使用的是同一个宿主机的操作系统内核,具体原因下一篇博文会详细分析。

    (6)操作系统:VM出的比较早,几乎支持了所有的操作系统;而容器只支持Linux内核,所以只能运行在Linux服务器上。

    (7)封装程度:理由同启动速度