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
aufs
storage 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