docker联合文件系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker联合文件系统相关的知识,希望对你有一定的参考价值。
参考技术A (Union filesystem)联合文件系统允许我们把多个文件系统逻辑上合并成一个文件系统,组成Union filesystem的文件系统不必相同(它们可以是ext2/3/4,vfat,ntfs,jffs...)。overlay是联合文件系统的一种(aufs...),overlay文件系统构建于其他文件系统之上,overlay其实更像是个挂载系统(mount system),功能是把不同的文件系统挂载到统一的路径。overlay是个分层的文件系统,底层文件系统通常叫 lower ,顶层文件系统系统通常叫 upper ,两者通常合并挂载到 merged 目录,最终用户看到的就是 merged 中的文件。
lower 文件系统是readonly,对 merged 中所有的修改都只对 upper 操作,记住这点很重要。下面我们在linux上创建一个overlay文件系统,用以说明overlay文件系统挂载,文件读写,文件新增和删除。
创建 lower upper merged work 目录,把 lower和upper 挂载到 merged , work 是空目录,必须和 merged 的文件系统类型一样。
挂载: sudo mount -t overlay overlay -o lowerdir=./lower,upperdir=./upper,workdir=./work merged/ ,挂载后 merged 目录结构如下:
可以看到 lower 和 upper 中的文件合并到了 merged 中,当 lower 和 upper 有相同路径的文件时, merged 中只显示 upper 中的。也就是说 upper 会遮住 lower 中同名的文件(同路径下)。
overlay提供了对只读文件系统的读写功能,适合用在需要维持一个只读镜像,又需要提供读写功能的系统中,比如openwrt和docker,下面我们介绍docker中overlay的应用。
docker的基础镜像其实就是个readonly的根文件系统,从基础镜像构建的镜像其实都只是把修改部分和基础镜像合并重新打包,我们从ubuntu镜像构建一个具有golang环境的镜像,用来说明overlay在docker中的应用。
Dockerfile 如下:
构建镜像
启动容器
查看容器
查看GraphDriver
从上面可以看到docker采用的是overlay2文件系统,LowerDir有多层。
/var/lib/docker/overlay2/1d65e86e54373a5b01afe28d0878a953fa2e9eb7cd14552a17d4a8628b476978/diff
/var/lib/docker/overlay2/b56e1dd54abdf8300b2f9726e3e92d3b32b78c8bf5b5cd807e27be78c671af40/diff
/var/lib/docker/overlay2/44c045232b8f3510d28965fbebcaad458263855785cc38e1a784a6731df7433d/diff
为什么会有这么多层,其实很好理解,查看Dockerfile中写了哪些规则:
现在我们核对下最地城镜像是否是ubuntu的镜像文件:
ubuntu是基础镜像,没有LowerDir, UpperDir就是我新建ubuntu:golang镜像LowerDir的最底层文件系统
以上是关于docker联合文件系统的主要内容,如果未能解决你的问题,请参考以下文章