上QQ阅读APP看书,第一时间看更新
1.1.2 Docker的架构介绍
要了解Docker,首先要看看它的架构图,如图1-1所示。
图1-1 Docker架构图
从图1-1可知,Docker并没有传统虚拟化中的Hypervisor层。因为Docker是基于容器技术的轻量级虚拟化,相对于传统的虚拟化技术,省去了Hypervisor层的开销,而且其虚拟化技术是基于内核的Cgroup和Namespace技术,处理逻辑与内核深度融合,所以在很多方面,它的性能与物理机非常接近。
在通信上,Docker并不会直接与内核交互,它是通过一个更底层的工具Libcontainer与内核交互的。Libcontainer是真正意义上的容器引擎,它通过clone系统调用直接创建容器,通过pivot_root系统调用进入容器,且通过直接操作cgroupfs文件实现对资源的管控,而Docker本身则侧重于处理更上层的业务。
提示
Libcontainer的详细介绍可参见第9章。
Docker的另一个优势是对层级镜像的创新应用,即不同的容器可以共享底层的只读镜像,通过写入自己特有的内容后添加新的镜像层,新增的镜像层和下层的镜像一起又可以作为基础镜像被更上层的镜像使用。这种特性可以极大地提高磁盘利用率,所以当你的系统上有10个大小为1GB的镜像时,它们总共占用的空间大小可能只有5GB,甚至更少。另外,Docker对Union mount的应用还体现在多个容器使用同一个基础镜像时,可极大地减少内存占用等方面,因为不同的容器访问同一个文件时,只会占用一份内存。当然这需要使用支持Union mount的文件系统作为存储的Graph Driver,比如AUFS和Overlay。