AUFS
AUFS
联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下
OverlayFS

在看
-
读取文件时,如果
upperdir 不存在该文件,则会从lowerdir 直接读取。 -
修改文件时并不影响
lowerdir 中的文件,因为它是只读的。 -
如果修改的文件在
upperdir 不存在,则会从lowerdir 拷贝到upperdir ,然后在upperdir 里面修改该文件,并不影响lowerdir 目录的文件。 -
删除文件则是将
upperdir 中将对应文件设置成了c 类型,即字符设备类型来隐藏已经删除的文件( 与AUFS 创建一个whiteout 文件略有不同) 。
root@host:/home/vagrant/overlaytest# tree -a
.
|-- lowerdir
| |-- both.txt
| `-- only.txt
|-- merged
|-- upperdir
| `-- both.txt
`-- workdir
`-- work
5 directories, 3 files
root@host:/home/vagrant/overlaytest# mount -t overlay overlay -olowerdir=./lowerdir,upperdir=./upperdir,workdir=./workdir ./merged
root@host:/home/vagrant/overlaytest# tree
.
|-- lowerdir
| |-- both.txt
| `-- only.txt
|-- merged
| |-- both.txt
| `-- only.txt
|-- upperdir
| `-- both.txt
`-- workdir
`-- work
5 directories, 5 files
root@host:/home/vagrant/overlaytest# tree -a
.
|-- lowerdir
| |-- both.txt
| `-- only.txt
|-- merged
| |-- both.txt
| `-- only.txt
|-- upperdir
| `-- both.txt
`-- workdir
`-- work
5 directories, 5 files
root@host:/home/vagrant/overlaytest# echo "modified both" > merged/both.txt
root@host:/home/vagrant/overlaytest# cat upperdir/both.txt
modified both
root@host:/home/vagrant/overlaytest# cat lowerdir/both.txt
lower both.txt
root@host:/home/vagrant/overlaytest# echo "modified only" > merged/only.txt
root@host:/home/vagrant/overlaytest# tree
.
|-- lowerdir
| |-- both.txt
| `-- only.txt
|-- merged
| |-- both.txt
| `-- only.txt
|-- upperdir
| |-- both.txt
| `-- only.txt
`-- workdir
`-- work
5 directories, 6 files
root@host:/home/vagrant/overlaytest# cat upperdir/only.txt
modified only
root@host:/home/vagrant/overlaytest# cat lowerdir/only.txt
lower only.txt
root@host:/home/vagrant/overlaytest# tree -a
.
|-- lowerdir
| |-- both.txt
| `-- only.txt
|-- merged
| |-- both.txt
| `-- only.txt
|-- upperdir
| |-- both.txt
| `-- only.txt
`-- workdir
`-- work
5 directories, 6 files
root@host:/home/vagrant/overlaytest# rm merged/both.txt
root@host:/home/vagrant/overlaytest# tree -a
.
|-- lowerdir
| |-- both.txt
| `-- only.txt
|-- merged
| `-- only.txt
|-- upperdir
| |-- both.txt
| `-- only.txt
`-- workdir
`-- work
root@host:/home/vagrant/overlaytest# ls -ls upperdir/both.txt
0 c--------- 1 root root 0, 0 May 19 02:31 upperdir/both.txt
回到
root@stretch:/home/vagrant# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f2aa67a397c4: Pull complete
3c091c23e29d: Pull complete
4a99993b8636: Pull complete
Digest: sha256:0fb320e2a1b1620b4905facb3447e3d84ad36da0b2c8aa8fe3a5a81d1187b884
Status: Downloaded newer image for nginx:latest
root@stretch:/home/vagrant# ls -ls /var/lib/docker/overlay2/
total 16
4 drwx------ 4 root root 4096 May 19 04:17 09495e5085bced25e8017f558147f82e61b012a8f632a0b6aac363462b1db8b0
4 drwx------ 3 root root 4096 May 19 04:17 8af95287a343b26e9c3dd679258773880e7bdbbe914198ba63a8ed1b4c5f5554
4 drwx------ 4 root root 4096 May 19 04:17 f311565fe9436eb8606f846e1f73f38287841773e8d041933a41259fe6f96afe
4 drwx------ 2 root root 4096 May 19 04:17 l
root@stretch:/var/lib/docker/overlay2# ls 09495e5085bced25e8017f558147f82e61b012a8f632a0b6aac363462b1db8b0/
diff link lower work
从我们示例可以看到,三层中
root@stretch:/var/lib/docker/overlay2# cat f311565fe9436eb8606f846e1f73f38287841773e8d041933a41259fe6f96afe/lower
l/7B2WM6DC226TCJU6QHJ4ABKRI6:l/4FHO2G5SWWRIX44IFDHU62Z7X2
root@stretch:/var/lib/docker/overlay2# cat 09495e5085bced25e8017f558147f82e61b012a8f632a0b6aac363462b1db8b0/lower
l/4FHO2G5SWWRIX44IFDHU62Z7X2
root@stretch:/var/lib/docker/overlay2# cat 8af95287a343b26e9c3dd679258773880e7bdbbe914198ba63a8ed1b4c5f5554/link
4FHO2G5SWWRIX44IFDHU62Z7X2
此时我们启动一个
root@stretch:/var/lib/docker/overlay2# docker run -idt --name nginx nginx
01a873eeba41f00a5a3deb083adf5ed892c55b4680fbc2f1880e282195d3087b
root@stretch:/var/lib/docker/overlay2# ls -ls
4 drwx------ 4 root root 4096 May 19 04:17 09495e5085bced25e8017f558147f82e61b012a8f632a0b6aac363462b1db8b0
4 drwx------ 5 root root 4096 May 19 09:11 11b7579a1f1775ad71fe0f0f45fcb74c241fce319f5125b1b92cb442385065b1
4 drwx------ 4 root root 4096 May 19 09:11 11b7579a1f1775ad71fe0f0f45fcb74c241fce319f5125b1b92cb442385065b1-init
4 drwx------ 3 root root 4096 May 19 04:17 8af95287a343b26e9c3dd679258773880e7bdbbe914198ba63a8ed1b4c5f5554
4 drwx------ 4 root root 4096 May 19 04:17 f311565fe9436eb8606f846e1f73f38287841773e8d041933a41259fe6f96afe
4 drwx------ 2 root root 4096 May 19 09:11 l
root@stretch:/home/vagrant# ls -ls /var/lib/docker/overlay2/11b7579a1f1775ad71fe0f0f45fcb74c241fce319f5125b1b92cb442385065b1/
4 drwxr-xr-x 4 root root 4096 May 19 09:11 diff
4 -rw-r--r-- 1 root root 26 May 19 09:11 link
4 -rw-r--r-- 1 root root 115 May 19 09:11 lower
4 drwxr-xr-x 1 root root 4096 May 19 09:11 merged
4 drwx------ 3 root root 4096 May 19 09:11 work
root@stretch:/var/lib/docker/overlay2# ls 11b7579a1f1775ad71fe0f0f45fcb74c241fce319f5125b1b92cb442385065b1/merged/
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@stretch:/var/lib/docker/overlay2# ls 11b7579a1f1775ad71fe0f0f45fcb74c241fce319f5125b1b92cb442385065b1/diff/
run var
如果我们在容器中修改文件,则会反映到容器层的
写时复制
容器运行时的只读模板。每一个镜像由一系列的层
Links
- https://jvns.ca/blog/2019/11/18/how-containers-work--overlayfs/ How containers work: overlayfs