Docker 镜像之存储管理 (3)

先来简单认识一下 aufs,aufs(advanced multi layered unification filesystem)是一种支持联合挂载的文件系统。简单来说就是支持将不同目录挂载到同一个目录下,这些挂载操作对用户来说是透明的,用户在操作该目录时并不会觉得与其他目录有什么不同。这些目录的挂载是分层次的,通常来说最上层是可读写层,下面的层是只读层。所以,aufs 的每一层都是一个普通的文件系统。
当需要读取一个文件 A 时,会从最顶层的读写层开始向下寻找,本层没有,则根据层之间的关系到下一层开始找,直到找到第一个文件 A 并打开它。
当需要写入一个文件 A 时,如果这个文件不存在,则在读写层新建一个,否则像上面的过程一样从顶层开始查找,直到找到最近的文件 A,aufs 会把这个文件复制到读写层进行修改。
由此可以看出,在第一次修改某个已有文件时,如果这个文件很大,即使只要修改几个字节,也会产生巨大的磁盘开销。
当需要删除一个文件时,如果这个文件仅仅存在于读写层中,则可以直接删除这个文件,否则就需要先删除它在读写层中的备份,再在读写层中创建一个 whiteout 文件来标志这个文件不存在,而不是真正删除底层的文件。
当新建一个文件时,如果这个文件在读写层存在对应的 whiteout 文件,则先将 whiteout 文件删除再新建。否则直接在读写层新建即可。

那么镜像文件在本地存放在哪里呢?
以 aufs 驱动为例,我们先查看 /var/lib/docker/aufs 目录下的内容:

$sudosu$ cd /var/lib/docker/aufs$ls

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdwzp.html