容器里的进程‘看到’’的文件系统
可能你立刻就能想到,这应该是_个关于MountNamespace的问题:容器里的应用进程理应‘看到”一套完全独立的文件系统°这样它就可以在自己的容器目录(比如/tmp)下进行操作’而完全不会受宿主机以及其他容器的影响。
容器迸程哪些目录需要重新挂载’比如这个/tmp目录。
可以看到’容器里的/tmp目录是以tmpfS方式单独挂载的。容器以tmpfS(内存盘)格式重新挂载/tmp目录。
这就是Mount Namespace跟其他Namespace的使用略有不同的地方:它对容器进程视图的改变—定要伴随着挂载操作才能生效。
假设有—个$HOME/test目录’你想把它作为—个/bin/bash进程的根目录。
执行chroot t命令’告诉操作系统我们将使用$HOME/test目录作为/bin/bash进程的根目录。
这个挂载在容器根目录上用来为容器进程提供隔离后执行环境的文件系统’就是所谓的容器镜像。 它还有—个更专业的名字: rootfs(根文件系统)。
dock 最核心原理
Docker项目最核心的原理实际上就是为待创建的用户进程。
- 启用Linux Namespace配置;
- 设置指定的Cgroups参数;
- 切换进程的根目录(change root)
rootfs 只是—个操作系统所包含的文件、配置和目录’并不包括操作系统内核。
在Llnux操作系统中这两部分是分开存放的’操作系统只有在开机启动时才会加载指定版本的内核镜像。
rootfS只是—个操作系统所包含的文件、配置和目录’并不包括操作
系统内核°在Llnux操作系统中’这两部分是分开存放的’操作系统只有在开机启动时才会加载指定版本的内核镜像°
正是由于rootfS的存在’容器才有了—个被反复强调至今的重要特:一致性
由于云端与本地服务器环境不同’因此应用的打包过程一直是使用PaaS时最麻烦的一个步骤。
’有了容器镜像(rootfs)之后,这个问题就被非常优雅地解决了。由于root色里打包的不只是应用’而是整个操作系统的文件和目录,这就意味着’应用以及它运行所需要的所有依赖都被封装在了一起。