linux内核的overlayfs,docker底层原理————overlayFS介绍与实践

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

概述

在docker底层原理的学习过程中,接触到了UnionFS的概念。

UnionFS,顾名思义,是联合文件系统的意思。那怎么个联合法呢?举个简单的例子:

假设,我们有两个文件夹A和文件夹B,A文件夹下有文件a1,a2,a3,B文件夹下有文件b1,b2,b3。

我们通过创建一个文件夹C,并且使用UnionFS,使得我们可以再C文件夹下可以直接访问a1,a2,a3,b1,b2,b3。

这样我们就把A文件夹和B文件夹联合起来了。

当然,在实际的实现过程中,概念会更多。

UnionFS的实现是比较多的,目前docker中使用的UnionFS的实现是overlay2,而我在网上找到的相关资料并不多,

处于好奇,专门对其进行了一些实际操作,并记录下来。

简介

overlayFS允许一个可读写的目录覆盖在多个只读的目录之上,这些目录就构成了多个层(layer),而当我们在联合起来的目录中工作的时候,

我们所有的写入操作最终都进入了最上层的读写层目录中,这一点我后续会通过命令展示。

overlayFS与其他的unionFS的实现最终要的不同在于,当一个文件打开之后,所有的操作都直接和底层的文件系统打交道,这样可以保证操作的

性能。

在Linux kernel 3.18之后,overlayFS已经集成到内核中去了。我们在该版本之后的Linux内核中,不需要安装,就可以开始使用overlayFS了。

使用

可读写的联合文件系统

我们使用如下命令来挂在一个overlay文件系统

mount -t overlay overlay -o lowerdir=/lower,upperdir=/upper,workdir=/work /merged

其中,lowerdir的值可以是一些的文件夹列表,使用:分开,这些事只读层。

merged文件夹是最终联合起来的文件系统,我们可以在merged文件夹中访问所有lowerdir和upperdir中的内容

在merged文件夹所做的所有修改,最终都会存储到upperdir目录中

workdir指定的目录需要和upperdir位于同一目录中

文件的覆盖顺序,upperdir目录拥有最高覆盖权限,lowerdir按照mount时从左到右的顺序,权重依次降低,左边的覆盖右边的同名文件或者文件夹。

注意,覆盖仅仅在mount时按照此顺序,一旦mount成功后,按照文件出现的早晚覆盖,出现早的会屏蔽出现晚的同名文件。除非修改是在merged目录中进行。

开机自动挂载

在/etc/fstab中实现自动挂载的格式如下,本人暂未实践

overlay /merged overlay noauto,x-systemd.automount,lowerdir=/lower,upperdir=/upper,workdir=/work 0 0

只读联合文件系统

mount -t overlay overlay -o lowerdir=/lower1:/lower2 /merged

overlayFS相关演示

317bfa3ead181f278d7597002e82bae9.png

23d190c007a29eb52e3ee5a9efcf0002.png

fbf7411ac6653344b7ba2e5da49a40c2.png

77d0573a0a34942d6ce58904691a23d1.png

c66803c0ebb55fe4849e2a087fe0142c.png

总结

overlayFS可以在多种应用场合中使用,我们这里关注在docker中的使用方式。

在docker中个,多个镜像可以看做是多个lowerdir,只读层,当我们启动一个容器的时候,使用overlayFS将多个镜像

联合挂载到一个目录,并使得容器中可以对目录中的文件进行读写操作,但读写操作仅仅会影响到当前容器的upperdir和

当前目录,并不会影响到镜像中的数据。

参考链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值