下图是容器的rootfs的三个部分,这个三个部分有七层,会被联合挂载到
/var/lib/docker/sufs/mnt
目录下面

只读层
是容器roofs的最下面五层,对应的正式ubuntu:latest镜像的五层。
每一层,都以增量的方式分别包含了Ubuntu操作系统的一部分
Init层
夹在只读层和读写层之间。Init层是Docker项目单独生成的一个内部层,专门用来存放/etc/hosts
、/etc/resolc.conf
等信息。这些文件本来是只读的Ubuntu镜像的一部分,但是用户往往在启动容器的时候会修改一些值,例如hostname等。
但是这些修改,我们又不希望在docker commit
的时候连同可读可写层一起提交,因此单独挂载了出来。
可读可写层
可读写层在没有写入文件之前时空的,一旦做出了写的操作,新的修改内容就会以增量的方式出现在这一层。
如果想要删除只读层里面的一个文件,需要做的也是讲只读层里面的文件遮挡起来,而不会真正地去删除这个文件。
因此,读写层存放的是我们修改容器之后的增量,在docker commit
之后,会保存提交上去,同时只读层里面的内容也不会被修改。
总结
容器的镜像中,只是一个操作系统的所有文件目录,并不包含内核,最多只有几百兆。这个镜像一旦被发布,就可以在世界的另一个地方拉取并且使用镜像,并且可以完整地复制这个镜像的制作者当初完整地环境。这是同期“强一致性”的重要体现。
容器镜像会成为未来软件发布的主流发布方式