Docker和虚拟机的区别及说明
作者:洛上言
Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,运行另外一个操作系统,保护系统中的任何应用。
两者有什么差异呢?
Doker的实现原理
Docker把应用及其所需要的依赖、函数库、甚至操作系统函数库也一起打包,那这样一来,应用直接运行时,可以直接调用本地函数库,然后与Linux内核进行交互,这样它就不再关心操作系统是什么系统了,于是就能实现跨系统的一种运行了。
虚拟机(virtual machine)
用到了一种名为Hypervisor的技术,这种技术可以在操作系统中模拟一个计算机的各种各样的硬件设备(比如CPU、内存等等),然后在这个模拟出的计算机上运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。
既然操作系统都能重新安装,那我们就可以在它上边去安装任意适合的依赖、函数库、以及应用,这样也实现了跨系统的应用部署。
对比来看
我们的虚拟机它是在一个系统里装了另外的一个系统,所以当应用执行时它会以为自己在一台真实的电脑上,因此它会去调用这个内置的操作系统,然后它再与Hypervisor进行交互,然后再把信息传递给了我们的web操作系统,web操作系统再去调用计算机硬件,于是我们的应用执行就完成了,此时它经过了层层的传递,所以它的性能相对来讲是比较差一点的。
Docker应用在执行时,是直接调用操作系统内核的,所以它的执行性能要比虚拟机的执行性能要好很多。
并且Docker仅仅是封装应用程序执行需要的一些简单的函数库和依赖,并没有模拟完整的操作系统,所以体积往往比较小,最小的一个docker容器可能只有几MB,而大一点就是几十MB,几百MB;而虚拟机动不动就要几个g甚至几百g的内存空间,因此体积占用是比较大的。
并且虚拟机启动的时候需要启动虚拟的计算机的操作系统,等于把这个计算机重启了一遍,然后再去启动虚拟操作系统上面的应用。
而Docker就是直接在操作系统上把一个进程启动起来了,所以它的启动速度也是非常的快。
总结:Docker和虚拟机的差异
- docker是一个系统进程,因为它是直接与操作系统内核做交互;虚拟机是在操作系统中的操作系统
- docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般
因此,现在企业做服务部署,基本上都会去选择用docker,而不会选择用虚拟机。
特性 | Docker | 虚拟机 |
---|---|---|
性能 | 接近原生 | 性能较差 |
硬盘占用 | 一般为 MB | 一般为 GB |
启动 | 秒级 | 分钟级 |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。