Docker镜像存储镜像存储overlayfs的使用的使用
一、概述一、概述
Docker中的镜像采用分层构建设计,每个层可以称之为“layer”,这些layer被存放在了/var/lib/docker/<storage-driver>/目录下,这里的storage-driver可以有很多种如:AUFS、OverlayFS、
VFS、Brtfs等。可以通过docker info命令查看存储驱动,(笔者系统是centos7.4):
通常ubuntu类的系统默认采用的是AUFS,centos7.1+系列采用的是OverlayFS。而本文将介绍以OverlayFS作为存储驱动的镜像存储原理以及存储结构。
二、二、OverlayFS 介绍介绍
OverlayFS是一种堆叠文件系统,它依赖并建立在其它的文件系统之上(例如ext4fs和xfs等等),并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行“合并”,然
后向用户呈现,这也就是联合挂载技术,对比于AUFS,OverlayFS速度更快,实现更简单。 而Linux 内核为Docker提供的OverlayFS驱动有两种:overlay和overlay2。而overlay2是相对于
overlay的一种改进,在inode利用率方面比overlay更有效。但是overlay有环境需求:docker版本17.06.02+,宿主机文件系统需要是ext4或xfs格式。
联合挂载联合挂载
overlayfs通过三个目录:lower目录、upper目录、以及work目录实现,其中lower目录可以是多个,work目录为工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见,最
后联合挂载完成给用户呈现的统一视图称为为merged目录。以下使用mount将演示其如何工作的。
使用mount命令挂载overlayfs语法如下:
mount -t overlay overlay -o lowerdir=lower1:lower2:lower3,upperdir=upper,workdir=work merged_dir
创建三个目录A、B、C,以及worker目录:
然后使用mount联合挂载到/tmp/test 下:
然后我们再去查看/tmp/test目录,你会发现目录A、B、C被合并到了一起,并且相同文件名的文件会进行“覆盖”,这里覆盖并不是真正的覆盖,而是当合并时候目录中两个文件名称都相同
时,merged层目录会显示离它最近层的文件:
同时我们还可以通过mount命令查看其挂载的选项:
以上这样的方式也就是联合挂载技术。
Docker中的中的overlay驱动驱动
介绍了overlay驱动原理以后再来看Docker中的overlay存储驱动,以下是来自docker官网关于overlay的工作原理图: