目录
当一个容器被创建的时候,我们希望容器中进程看到的文件是一个独立的隔离环境,我们可以在容器进程重启之前挂载整个根目录 /,由于 Mount Namespace 的存在,这个挂载对宿主机不可见,所以容器进程就可以在里面随便折腾了。
在 Linux 中可以使用 chroot 来改变某进程的根目录。
来看下 chroot
chroot 主要是用来改换根目录的,在新设定的虚拟根目录中运行指定的命令或交互 Shell。一个运行在这个环境下,经由 chroot 设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。
为了让容器这个根目录看起来更'真实',一般会在容器的根目录下面挂载一个完整的操作系统的文件系统,比如 Ubuntu16.04 的 ISO。这样,在容器启动之后,我们在容器里通过执行 ls / 查看根目录下的内容,就是 Ubuntu 16.04 的所有目录和文件。
这个挂载到容器根目录,用来给容器提供隔离后的执行环境的文件系统,称为为'容器镜像',或者 rootfs(根文件系统)。
对于 Docker 来讲,最核心的原理就是为待创建的用户进程执行下面三个操作:
1、启用 Linux Namespace 配置;
2、设置指定的 Cgroups 参数;