与虚拟机比较,容器更加轻量级,因为虚拟机“虚拟”了一个完整的操作系统,而容器只是一个隔离的进程而已。
当一台主机上运行三个虚拟机的时候,你就拥有了三个完全分隔的操作系统,共享同一台主机。多个容器则会完全执行运行在宿主机上的同一个内核的系统调用,这个内核也是唯一一个在宿主机操作系统执行x86指令的内核。
假如当前有6个相同的应用程序分别用虚拟机和Docker容器运行,你会发现无论是应用A和B无论在虚拟机和容器上都可以访问同样的二进制和库。在虚拟机里是理所当然的,而Docker通过镜像分层,容器运行时,一个新的可写层在镜像层之上被创建,每一层仅被存一次,当基于相同基础层的镜像被创建成两个容器时,它们就能读取相同的文件;但是如果其中一个容器写入某些文件,另一个是无法看见文件变更的,即使它们共享文件,也是彼此隔离的。
虽然容器比虚拟机轻量的多,但也给运行于其中的应用带来了一些局限性,这些问题留待后续讨论。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。