1.Docker容器与虚拟机有什么区别
1.1 虚拟机
虚拟机:虚拟机是目前在IT架构中运用最广泛的一种虚拟化技术,它的目的主要是通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,并且提高服务器的利用率。看一下虚拟机的架构图:
图片借鉴自:https://www.jianshu.com/p/50f48eb25215
Infrastructure:为基础设施,他可以是个笔记本电脑,也可以是一个服务器机柜,还可以是一个云主机。
Host Operating System:为主机的物理操作系统,是管理计算机硬件与软件资源的计算机程序。
Hypervisor:为虚拟机监视器,是一种运行在基础物理服务器和虚拟操作系统间的中间软件层,可允许多个虚拟操作系统和应用共享硬件。
Guest OS:虚拟操作系统,虚拟机内部运行的操作系统。
Bins/Libs:具体的二进制文件和库文件,保存一些工具和用户空间的库。
APP:用户应用程序。
1.2 Docker
Docker:是一个应用容器引擎,让开发者可以打包应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Window机器上,也可以实现虚拟化。我们再来看一下Docker的架构图:
可以看到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)封装程度:理由同启动速度