从零开始入门 K8s:深入剖析 Linux 容器( 九 )

docker 镜像的存储 , 它的底层是基于不同的文件系统的 , 所以它的存储驱动也是针对不同的文件系统作为定制的 , 比如 AUFS、btrfs、devicemapper 还有 overlay 。 docker 对这些文件系统做了一些相对应的 graph driver 的驱动 , 通过这些驱动把镜像存在磁盘上面 。

以 overlay 为例
存储流程
接下来我们以 overlay 这个文件系统为例 , 看一下 docker 镜像是怎么在磁盘上进行存储的 。

先看一下下面这张图 , 简单地描述了 overlay 文件系统的工作原理 。

最下层是一个 lower 层 , 也就是镜像层 , 它是一个只读层;

右上层是一个 upper 层 , upper 是容器的读写层 , upper 层采用了写实复制的机制 , 也就是说只有对某些文件需要进行修改的时候才会从 lower 层把这个文件拷贝上来 , 之后所有的修改操作都会对 upper 层的副本进行修改;

upper 并列的有一个 workdir , 它的作用是充当一个中间层的作用 。 也就是说 , 当对 upper 层里面的副本进行修改时 , 会先放到 workdir , 然后再从 workdir 移到 upper 里面去 , 这个是 overlay 的工作机制;

推荐阅读