Docker篇之镜像存储-OverlayFS和联合挂载技术

OverlayFS是内核提供的文件系统,其中overlay和overlay2是docker的存储驱动,只是版本不同,
overlay2是overlay的改进版。

要熟悉Docker的镜像存储相关知识,首先从Docker镜像存储方式来说起。
一、Docker中镜像存储

Docker中的镜像采用分层构建设计,每个层可以称之为“layer”,这些layer被存放在/var/lib/docker//目录下。
这里的storage-driver可以有很多种如:AUFS、OverlayFS、VFS、Brtfs等。
可以通过docker info命令查看存储驱动。
在这里插入图片描述
本机采用的是Centos7系统,通过docker info可以看出
Storage Driver:overlay2 , 表明镜像存储驱动版本为overlay2

注意:通常ubuntu类的系统默认采用的是AUFS,centos7.1+系列采用的是OverlayFS。

二、OverlayFS
1、简介
OverlayFS是一种堆叠文件系统。它依赖并建立在其它的文件系统之上(例如ext4fs和xfs等等)。并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行“合并”,然后向用户呈现,这也就是联合挂载技术。

对比AUFS,OverlayFS更高效,简便,故而使用率更高。
但是在Linux系统中,其内核为Docker提供的存储驱动OverlayFS目前只有两种:overlay和overlay2。
overlay2是相对于overlay的一种改进,在inode利用率方面比overlay更有效。
但是overlay有环境需求:docker版本17.06.02+,宿主机文件系统需要时ext4或xfs格式。

2、overlayfs联合挂载:
overlayfs通过三个目录:lower目录、upper目录、以及work目录实现,其中lower目录可以是多个,work目录为工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见,最后联合挂载完成给用户呈现的统一视图称为为merged目录。
docker使用overlay文件系统来构建和管理镜像与容器的磁盘结构。
overlay文件系统分为lowerdir、upperdir、merged, 对外统一展示为merged,upperdir和lower的同名文件会被upperdir覆盖。

具体层次如下
overlay的使用方法:
[root@ops2-1 /var/lib/docker/overlay]
#mount -t overlay overlay -o lowerdir=./lower,upperdir=./upper,workdir=./work ./merged

注:workdir必须和upperdir是mount在同一个文件系统下,而lower不是必须的。
lower目录可以是一个目录链
挂载文件系统的基本命令如下:
mount -t overlay overlay -o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work /merge , 如果没有upperdir,merged是只读的。

其中:lower1:lower2:lower3 表示不同的lower层目录,不同的目录使用":"分隔,层次关系依次为lower1>lower2>lower3 (注:多lower层功能支持在Linux-4.0合入,Linux-3.18版本只能指定一个lower dir;然后upper和work目录分别表示upper层目录和文件系统挂载后用于存放临时和间接文件的工作基目录(work base dir),最后的merged目录就是最终的挂载点目录。),若执行顺利,执行以上命令完成之后,overlayfs就成功挂载到merged目录下了。

挂载选项支持(即“-o”参数):
1)lowerdir=xxx:指定用户需要挂载的lower层目录(支持多lower,最大支持500层)
2)upperdir=xxx:指定用户需要挂载的upper层目录;
3)workdir=xxx:指定文件系统的工作基础目录,挂载后内容会被清空,且在使用过程中其内容用户不可见;
4)default_permissions:功能未使用;
5)redirect_dir=on/off:开启或关闭redirect directory特性,开启后可支持merged目录和纯lower层目录的rename/renameat系统调用;

注:lowerdir、upperdir和workdir为基本的挂载选项

3、吃个栗子
使用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命令查看其挂载的选项:
mount | grep overlay
在这里插入图片描述

至此,这便是联合挂载方法。

欢迎收藏点评,谢谢!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值