UnionFS技术

UnionFS技术

unionFS可以把文件系统上的多个目录内容联合挂载到同一个目录下,而目录的物理位置是分开的。先用一个简单的例子体会一下:
1.先创建如下的目录结构

1
2
3
4
5
6
7
8
9
|-- a
| |-- a1.txt
| |-- a2.txt
| `-- test.txt
|-- b
| |-- b1.txt
| |-- b2.txt
| `-- test.txt
`-- mnt

2.执行挂载命令

1
2
3
$ sudo mount -t aufs -o dirs=./a:./b none ./mnt
$ ls mnt
a1.txt a2.txt b1.txt b2.txt test.txt

可以看到a目录和b目录都被挂载到mnt了。
3.修改文件

1
$ echo hello > mnt/test.txt

查看各文件夹中的内容,mnt和a文件夹中的test.txt被修改了,b中没有修改。原因是在mount aufs命令中,没有指a、b目录的权限,默认上来说,命令行上第一个(最左边)的目录是可读可写的,后面的全都是只读的。也可以在挂载的时候自己指定权限(mount -t aufs -o dirs=./a=rw:./b=rw none ./mnt)。
再修改mnt/b1.txt,会发现b中的b1.txt没有变化,而a中多了一个b1.txt。

4.unionFS与docker
UnionFS技术在Docker容器技术中的运用,首先体现在镜像(image)容器(container)上。每一个Docker镜像都是一个只读的文件夹,当在容器中运行镜像时,Docker会自动挂载镜像中的、只读的文件目录,以及宿主机上一个临时的、可写的文件目录。容器中所有文件修改,都会写入这个临时目录里去。容器终结后,这个临时目录也会被相应删除。

容器运行时,在挂载的临时目录中如果写入数据,还可以选择把这部分数据从临时目录中保存下来,这样就生成了一个新的镜像。Docker在保存新镜像时,会把它们两部分——原镜像和增量——都保存在新镜像中。其中新的增量部分,就被称为层(layer)

reference
https://www.jianshu.com/p/47c4a06a84a4
https://blog.csdn.net/songcf_faith/article/details/82787946
https://zhuanlan.zhihu.com/p/43372662