docker容器核心技术点:

容器其实本质上就是一个进程,只不过容器的进程是比较特殊的。
容器技术的核心功能,就是通过约束和修改进程的动态表现,创造出一个“边界”,通过“障眼法”让人觉得它是一个独立的系统。大多数容器都是使用 Cgroups 技术来约束进程,通过 Namespace 技术来修改进程的视图。
Namespace 其实是在创建新进程时候加了一个可选参数,它利用 Linux 的系统调用 clone() 为新创建的进程指定一个 CLONE_NEWPID 的参数,那么新创建的进程就会看到一个全新的进程空间,在这个进程空间里面它的 PID 就是 1。
Namespace 除了可以模拟 PID 之外,还提供了 Mout、UTS、IPC、Network 和 User 等,在不同的进程上下文做隔离操作。
Cgroups 是Linux内核提供的一种可以限制单个进程或者多个进程所使用资源的机制,全称是 control groups,可以对 CPU、内存等资源实现精细化的控制。

容器最核心的原理实际上就是为用户创建进程,然后启动 Linux 的 Namespace 和配置 Cgroup 参数为用户创建了一个隔离环境。

但我们是在一个完全与宿主机不同的目录结构当作,这其实是容器通过 chroot 切换了进程的根目录来实现的
rootfs模拟了一个独立的系统根目录环境

引入了层的概念,即用户在制作镜像时的每一步操作都会生成一个层,也就是增量的 rootfs
Docker 镜像的层分为只读层、可读写层和 init 层
1、只读层包含了整个底层操作系统所必须的一些目录和依赖
2、可读写层没写入文件之前,这个目录是空的。而一旦有了写操作,修改的内容就会以增量的方式出现在这层中
3、init 层用来存放一些例如 /etc/hosts、/etc/resolv.conf等信息
最后这些层被合并为一个目录下,组成了一个完整的操作系统供容器使用