Docker 是一个开源的应用容器引擎,让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器上,也能够实现虚拟化。容器是彻底使用沙箱机制,相互之间不会有任何接口。docker
虚拟机(Virtual Machine)指经过软件模拟的具备完整硬件系统功能的、运行在一个彻底隔离环境中的完整计算机系统。安全
主操做系统(Host Operating System):全部主流的Linux发行版均可以运行Docker。对于MacOS和Windows,也有一些办法"运行"Docker。
Docker守护进程(Docker Daemon):Docker守护进程取代了Hypervisor,它是运行在操做系统之上的后台进程,负责管理Docker容器。
各类依赖:对于Docker,应用的全部依赖都打包在Docker镜像中,Docker容器是基于Docker镜像建立的。
应用:应用的源代码与它的依赖都打包在Docker镜像中,不一样的应用须要不一样的Docker镜像。不一样的应用运行在不一样的Docker容器中,它们是相互隔离的。性能
启动时间:Docker秒级启动,虚拟机分钟级启动。spa
轻量级:docker镜像大小一般以M为单位,虚拟机以G为单位。容器资源占用小,要比虚拟机部署更快速。操作系统
性能:docker共享宿主机内核,系统级虚拟化,占用资源少,没有Hypervisor层开销,性能基本接近物理机; 虚拟机须要Hypervisor层支持,虚拟化一些设备,具备完整的GuestOS,虚拟化开销大,于是下降性能,没有容器性能好。blog
安全性:因为共享宿主机内核,只是进程级隔离,所以隔离性和稳定性不如虚拟机,docker具备必定权限访问宿主机内核,存在必定安全隐患。接口
使用要求:VM基于硬件的彻底虚拟化,须要硬件CPU虚拟化技术支持; docker共享宿主机内核,可运行在主流的Linux发行版,不用考虑CPU是否支持虚拟化技术。进程
总结:虚拟机更擅长于完全隔离整个运行环境。例如,云服务提供商一般采用虚拟机技术隔离不一样的用户。资源