Docker的OverlayFS


OverlayFS 的实现方式

OverlayFS通过三个目录:lower目录、upper目录、以及work目录实现,其中lower目录可以是多个,
upper目录为可以进行读写操作的目录, work目录为工作基础目录,挂载后内容会被清空,且在使用过程中
其内容用户不可见,最后联合挂载完成给用户呈现的统一视图称为merged目录。

image-20240911163200764

## 模拟overlayfs存储方式
## 模拟overlayfs存储方式
1.创建文件
[root@k8s01 ~]# mkdir /lower{1..3}
[root@k8s01 ~]# mkdir /upper /work /merged

2.挂载文件系统
[root@k8s01 ~]# mount -t overlay overlay -o lowerdir=/lower1:/lower2:/lower3,upperdir=/upper,workdir=/work /merged

3.查看挂载
[root@k8s01 ~]# mount | grep merged

4.在/upper 目录中写入文件,在merged中可以显示
[root@k8s01 /]# touch /upper/upper.txt
[root@k8s01 /]# ll /merged/
total 0
-rw-r--r-- 1 root root 0 Mar 14 02:17 upper.txt

5. 在merged中写入文件, 实际存储到了/uppper
[root@k8s01 /]# touch /merged/d.txt
[root@k8s01 /]# ll /upper/
total 0
-rw-r--r-- 1 root root 0 Mar 14 02:19 d.txt
注:如果没有upperdir, merged是只读的
[root@node-2 overlay2]# umount /merged
[root@node-2 overlay2]# mount -t overlay overlay -o lowerdir=/lower1:/lower2
/merged
[root@k8s01 /]# touch /merged/c.txt
touch: cannot touch ‘/merged/c.txt’: Read-only file system
mount -t overlay overlay:
这部分指定使用 OverlayFS 文件系统类型(-t overlay),并使用名字 overlay 来挂载。

-o lowerdir=/lower1:/lower2:/lower3:
这里定义了 lowerdir,即多个只读层的目录。
在这种情况下,有三个 lower 层目录:/lower1, /lower2, /lower3,它们是按顺序叠加的。如果多个层中有相同名称的文件或目录,位于前面的目录会覆盖后面的目录(从左到右)。

upperdir=/upper:
这是可写的 upperdir,表示上层目录。任何对文件的更改(创建、修改、删除)都会写入这个目录。upperdir 中的文件将“覆盖”同名的 lowerdir 中的文件。

workdir=/work:
OverlayFS 需要一个工作目录(workdir),它必须与 upper 层在相同的文件系统上。这个目录存储一些 OverlayFS 操作的临时数据。

/merged:
最后,/merged 是挂载点,即将最终合并后的文件系统挂载到该目录。通过访问 /merged,你可以看到 lower1、lower2、lower3 和 upper 层合并后的结果。