(1)docker有着比虚拟机更少的抽象层
由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
(2)docker利用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需几秒钟。
左边是我们的虚拟机,两边都是硬件,假设都是同一台笔记本,两边都有主机的操作系统,左边(Hypervisor)可以看作是VMware,上面的每个Guest OS可以看作是centos7、Ubuntu、Linux Redhat,每个系统都要重量级的加载网络配置、硬件资源虚拟化等等,然后再上面加载各种第三方的libs库,再上面才跑各种应用。相当于整个系统都在安装,整个系统都搬过来了。
而docker直接利用宿主机的操作系统,这样Docker Engine就很轻量地做了一层容器虚拟化,每个容器跑在docker上,相当于我就在window上装了个软件,这个软件上面又运行了另外一些软件,容器里运行了redis、mongodb、nginx。