Docker技术原理
Docker实际上做了三件事:
- 启用
Linux Namespace
配置; - 设置指定的
Cgroups
参数; - 切换进程的根目录
(change root)
。
其中,第一步用于指定容器进程的Namespace
,通过clone()
命令中的CLONE_NEWPID
参数指定该进程的PID
,使得容器内的进程只能看到同一Namespace
下的进程;
第二步,设置Cgroups
用于限制进程组的硬件资源,使其只能使用宿主机的部分资源(例如只能使用50%的CPU);
第三步,首先通过clone()
命令中的CLONE_NEWNS
参数设置Mount Namespace
,然后使用chroot
设置容器进程的根目录。
Docker分层文件系统
以Ubuntu
镜像为例,该镜像有五层,每层都是Ubuntu
操作系统的一部分。
在使用镜像时,Docker会把这些增量联合挂载到一个统一的挂载点,在这个挂载点上,显示的就是一个完整的Ubuntu
系统目录。