OverlayFS是一个类似于AUFS 的现代联合文件系统,更快实现简单。
OverlayFS是内核提供的文件系统,overlay和overlay2是docker的存储驱动。
OverlayFS将单个Linux主机上的多个目录合并成一个目录。这些目录被称为层,统一过程被称为联合挂载。OverlayFS底层目录称为lowerdir, 高层目录称为upperdir。合并统一视图称为merged。当需要修改一个文件时,使用CoW将文件从只读的Lower复制到可写的Upper进行修改,结果也保存在Upper层。在Docker中,底下的只读层就是image,可写层就是Container。
下图分层图,镜像层是lowdir,容器层是upperdir,统一的视图层是merged层
拉取镜像
[root@K8SAP2 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
6910e5a164f7: Pull complete
Digest: sha256:4062bbdd1bb0801b0aa38e0f83dece70fb7a5e9bce223423a68de2d8b784b43b
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@JXQVKK8SAP2 ~]# ls /var/lib/docker/overlay2/
c927b7ed5f2d88d56eb5f4136b77faf290f96da4e159c508591f8bf78f40bd45 l
[root@K8SAP2 ~]# ls /var/lib/docker/overlay2/c927b7ed5f2d88d56eb5f4136b77faf290f96da4e159c508591f8bf78f40bd45/
diff link
[root@JXQVKK8SAP2 ~]# ls /var/lib/docker/overlay2/c927b7ed5f2d88d56eb5f4136b77faf290f96da4e159c508591f8bf78f40bd45/diff/
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@K8SAP2 ~]# ll -l /var/lib/docker/overlay2/l/
总用量 0
lrwxrwxrwx 1 root root 72 6月 17 10:13 ZNWQ3TA3VWLXXTINHUR6SLCRSR -> ../c927b7ed5f2d88d56eb5f4136b77faf290f96da4e159c508591f8bf78f40bd45/diff
[root@K8SAP2 ~]# ll /var/lib/docker/overlay2/l/ZNWQ3TA3VWLXXTINHUR6SLCRSR/
总用量 4
lrwxrwxrwx 1 root root 7 5月 11 2019 bin -> usr/bin
drwxr-xr-x 2 root root 6 6月 11 10:35 dev
drwxr-xr-x 51 root root 4096 6月 11 10:35 etc
drwxr-xr-x 2 root root 6 5月 11 2019 home
lrwxrwxrwx 1 root root 7 5月 11 2019 lib -> usr/lib
lrwxrwxrwx 1 root root 9 5月 11 2019 lib64 -> usr/lib64
drwx------ 2 root root 6 6月 11 10:35 lost+found
drwxr-xr-x 2 root root 6 5月 11 2019 media
drwxr-xr-x 2 root root 6 5月 11 2019 mnt
drwxr-xr-x 2 root root 6 5月 11 2019 opt
drwxr-xr-x 2 root root 6 6月 11 10:35 proc
dr-xr-x--- 2 root root 162 6月 11 10:35 root
drwxr-xr-x 11 root root 163 6月 11 10:35 run
lrwxrwxrwx 1 root root 8 5月 11 2019 sbin -> usr/sbin
drwxr-xr-x 2 root root 6 5月 11 2019 srv
drwxr-xr-x 2 root root 6 6月 11 10:35 sys
drwxrwxrwt 7 root root 145 6月 11 10:35 tmp
drwxr-xr-x 12 root root 144 6月 11 10:35 usr
drwxr-xr-x 20 root root 262 6月 11 10:35 var
启动一个容器
docker run -it centos /bin/bash
cd /tmp/
touch aaa
docker commit --author "cuihao" --message "测试" suspicious_jang centos:v1
[root@K8SAP2 ~]# ll /var/lib/docker/overlay2/
总用量 0
drwx------ 5 root root 69 6月 17 10:35 1646a988c2a92439815d25bb3908bcd28e0567f0df433e919378086f85aa2208
drwx------ 4 root root 72 6月 17 10:36 1646a988c2a92439815d25bb3908bcd28e0567f0df433e919378086f85aa2208-init
drwx------ 4 root root 55 6月 17 10:37 ae65fd82a79e1fe22016749cb3eae62984803ad6d5dd9f2b09c2a63847842a2c
drwx------ 3 root root 47 6月 17 10:35 c927b7ed5f2d88d56eb5f4136b77faf290f96da4e159c508591f8bf78f40bd45
drwx------ 2 root root 142 6月 17 10:37 l
[root@K8SAP2 ~]# ls /var/lib/docker/overlay2/ae65fd82a79e1fe22016749cb3eae62984803ad6d5dd9f2b09c2a63847842a2c/
diff link lower work
[root@K8SAP2 ~]# ls /var/lib/docker/overlay2/ae65fd82a79e1fe22016749cb3eae62984803ad6d5dd9f2b09c2a63847842a2c/diff/
tmp
[root@K8SAP2 ~]# ls /var/lib/docker/overlay2/ae65fd82a79e1fe22016749cb3eae62984803ad6d5dd9f2b09c2a63847842a2c/diff/tmp/
aaa
[root@K8SAP2 ~]# ll /var/lib/docker/overlay2/1646a988c2a92439815d25bb3908bcd28e0567f0df433e919378086f85aa2208
总用量 8
drwxr-xr-x 3 root root 17 6月 17 10:35 diff
-rw-r--r-- 1 root root 26 6月 17 10:35 link
-rw-r--r-- 1 root root 57 6月 17 10:35 lower
drwxr-xr-x 1 root root 17 6月 17 10:35 merged
drwx------ 3 root root 18 6月 17 10:35 work
[root@K8SAP2 ~]# cat /var/lib/docker/overlay2/1646a988c2a92439815d25bb3908bcd28e0567f0df433e919378086f85aa2208/lower
l/POQQI3CWQL3JKXEHL3UGFGX6UP:l/ZNWQ3TA3VWLXXTINHUR6SLCRSR
[root@K8SAP2 ~]# ll /var/lib/docker/overlay2/l/
总用量 0
lrwxrwxrwx 1 root root 72 6月 17 10:35 HLHI6Q2NYJKL6QZP2DJ2MD36W7 -> ../1646a988c2a92439815d25bb3908bcd28e0567f0df433e919378086f85aa2208/diff
lrwxrwxrwx 1 root root 72 6月 17 10:37 OJGBQO4PPDIKKMRSXIMMSFW3EO -> ../ae65fd82a79e1fe22016749cb3eae62984803ad6d5dd9f2b09c2a63847842a2c/diff
lrwxrwxrwx 1 root root 77 6月 17 10:35 POQQI3CWQL3JKXEHL3UGFGX6UP -> ../1646a988c2a92439815d25bb3908bcd28e0567f0df433e919378086f85aa2208-init/diff
lrwxrwxrwx 1 root root 72 6月 17 10:13 ZNWQ3TA3VWLXXTINHUR6SLCRSR -> ../c927b7ed5f2d88d56eb5f4136b77faf290f96da4e159c508591f8bf78f40bd45/diff
[root@JXQVKK8SAP2 ~]# ll /var/lib/docker/overlay2/1646a988c2a92439815d25bb3908bcd28e0567f0df433e919378086f85aa2208/merged/tmp/
总用量 8
-rw-r--r-- 1 root root 0 6月 17 10:35 aaa
-rwx------ 1 root root 1379 6月 11 10:35 ks-script-585nin8f
-rwx------ 1 root root 671 6月 11 10:35 ks-script-z6zw_bhq
使用Dockerfile构建镜像
命令挂载
mount -t overlay overlay -o lowerdir=lower1:lower2:lower3,upperdir=upper,workdir=work merged_dir