docker2--基础学习(容器镜像)

为何容器进程看到的文件系统是一个隔离的环境:容器进程再启动前重新挂载了根目录"/"。而由于Mount Namespace的存在这个挂载对宿主机不可见。

linux系统中有个chroot命令,可以在shell这中改变进程的根目录到指定位置。

整个过程就是修改了进程的根目录,并且挂载了完整的操作系统的文件系统。所以ls获取的不是宿主机的内容。


而挂载在容器根目录,用来为容器进程提供隔离后执行环境的文件系统就是镜像。也叫rootfs。

对于docker项目最核心的原理就是为待创建的用户进程:

1.启用 Linux Namespace 配置;

2.设置指定的 Cgroups 参数;

3.切换进程的根目录(Change Root)。

docker每run一次就会生成一层。也就是一个增量的rootfs。这个需要用到联合文件系统。


联合挂载后:


例如:先拉去镜像


查看image相关信息: docker image inspect ubuntu:latest


这个ubuntu镜像有5个增量rootfs。每一层都是ubuntu操作系统与目录一部分。而在使用镜像的时候docker会联合挂载到一个目录。

    而这个挂载点就是上面的rootDir:"RootDir": "/var/lib/docker/overlay/0f9dceb5c1c6a0297b3e296caf3129c5e250a17390a2a17bbfae11625094c9b2/root"

ls该路径即可查看:

注意overlayfs挂载

五层镜像是如何挂载呢?这里可以看到内部id(si)

这里

 mmp 哭晕厕所。  overlayfs挂载 没找到所谓的si,未完待续

你可能感兴趣的:(docker2--基础学习(容器镜像))