docker之路:overlay2
If your Linux kernel is version 4.0 or higher, and you use Docker CE, consider using the newer overlay2, which has potential performance advantages over the
aufsstorage driver.
docker 官方建议如果可以的话建议使用overlay2.
overlay 架构图

overlay 有三层,merge,upperdir,lowerdir。upperdir 是可读写层,对应docker的容器层。lowerdir 是只读层,对应docker的镜像层。merged 是前面两层的统一视图,upperdir 的文件可以屏蔽lowerdir相同的文件。
docker中的overlay2
如果使用 overlay2 文件系统那么在路径 /var/lib/docker/overlay2 下就存在你所下载的镜像文件
1 | root@delveshal-GE62-2QD:/var/lib/docker/overlay2# ls |
最后有一个命名为l的文件夹,里面保存着链接文件
1 | root@delveshal-GE62-2QD:/var/lib/docker/overlay2/l# ls |
现在启动一个busybox容器1
delveshal@delveshal-GE62-2QD:/var/lib/docker$ docker run -it busybox
/var/lib/docker/overlay2文件下就会多了两个文件夹
1 | 8710aaa81131d37e527a5d11cb61316e0446d3b25b87a5f0b398561cbd7f5b7e |
8710aaa...-init 文件夹是docker自动生成的最上层只读层,主要放置了容器运行所必要的文件系统1
2root@delveshal-GE62-2QD:/var/lib/docker/overlay2/8710aaa81131d37e527a5d11cb61316e0446d3b25b87a5f0b398561cbd7f5b7e-init/diff# ls
dev etc proc sys
例如 proc 进程信息,etc hostname,resolve.conf等
8710aaa... 文件夹是 docker 容器的读写层
1 | root@delveshal-GE62-2QD:/var/lib/docker/overlay2/8710aaa81131d37e527a5d11cb61316e0446d3b25b87a5f0b398561cbd7f5b7e# tree -L 1 |
diff 是 overlay2 的upperdir 是一个文件夹。lower 是 overlay2 的 lowerdir,但是是一个文本文件,里面存储的是链接路径,其指向镜像文件夹。merge 是容器的根文件系统,并且只会在容器运行的时候才会出现。1
2root@delveshal-GE62-2QD:/var/lib/docker/overlay2/8710aaa81131d37e527a5d11cb61316e0446d3b25b87a5f0b398561cbd7f5b7e# cat lower
l/FV4T7O5OSNV77P2YSY4RHIC5Y2:l/QSZYTEU3AVKLJEQM7DGER2KL7F
在容器里面往/root/ 写入一个文件1
2
3
4
5
6
7
8
9/ # ls
bin dev etc home proc root sys tmp usr var
/ # ls
bin dev etc home proc root sys tmp usr var
/ # cd root/
~ # ls
~ # cat>test.txt<<EOF
> test
> EOF
那么文件就会出现在1
2root@delveshal-GE62-2QD:/var/lib/docker/overlay2/8710aaa81131d37e527a5d11cb61316e0446d3b25b87a5f0b398561cbd7f5b7e/diff/root# ls
test.txt