docker的overlay2存储文件系统

docker支持多种graphDriver(联合文件系统),包括vfs,deviceMapper,overlay,overlay2,aufs等,其中最经常使用的是aufs,但随着linux内核3.18把overlay归入其中后,overlay的地位就变得更换重,node

目前的docker默认的存储是哦verlay2,其速度更快,实现更简单。linux

查看docker使用的存储文件系统;docker

docker info | grep "Storage Driver"json

修改docker的存储文件系统类型vim

vim /etc/docker/daemon.json缓存

{app

"storage-driver": "overlay2"ide

}性能

overlay2是如何运做的优化

overlayFS将单个linux主机上的两个目录分层,并将他们显示为单个目录。这些目录称为层,统一过程称为联合安装。overlayFS指向下层目录lowerdir(镜像层)和上层目录upperdir(容器层)。

统一视图经过其本身的目录公开merged(mount挂载对外开放,可以使用mount  | grep overlay2查看挂载的信息,lowerdir镜像层信息和upperdir容器层信息和workdir层信息)。

        该overlay2驱动程序原生支持多达128个较低的overlayFS层,此功能为与层相关的docker命令(docker build)提供了更好的性能docker commit,而且在后备文件系统上消耗的inode更少。

要建立容器,overlay驱动程序会组合镜像层和容器层的目录。镜像层(lowerdir)是只读的,容器层组合后是最上层的,是可读写的。


容器读写是如何使用overlay2

读文件的时候,文件不在upperdir则从lowerdir读,若是upperdir和lowerdir存在相同名称的文件,则读取upperdir中的文件。

在第一次写某个文件时,该文件只存在lowerdir中,则从lowerdir里面copy_up到upperdir层,无论文件多大,copy完再写,以后的操做就只修改upperdir层中文件的副本。

删除或者重命名镜像层的文件都只是在容器层生成whiteout文件标志。


overlay2支持多个容器访问相同文件时共用page cache,在copy_up的时候overlay2比aufs更快,由于aufs的层级多搜索会有延迟,而overlay2会有缓存机制。

优化方面能够用ssd,而后频繁的io操做,能够经过挂载volumes来作,绕过存储驱动,并且能够多个容器共享数据,持久化数据。

                

                经过下面官网介绍图知道,若是upperdir和lowerdir有同名文件时会用upperdir的文件 

overlayfs lowerdir, upperdir, merged

docker存储文件目录介绍

docker的存储文件目录默认为/var/lib/docker/overlay2

[root@docker2 overlay2]# ll

总用量 4

drwx------  3 root root     30 7月  29 21:19 07538ad1adc0b3bdfd11715717fafc17a4692095e495b146f3180e46d65987dc

drwx------  4 root root     55 7月  29 21:19 390f32915aa93e778fc5b407c3765066879d30f86685c45221b110f13aed9b4f

drwx------. 4 root root     55 5月  15 20:22 4cd493e0beb734394ee51db59e0e29e2502399713f62ca84b16c9e8cc2f8d3a0

drwx------. 3 root root     30 5月  15 20:12 4e8f437ef36c77b378b5d56736cde4fca5969dc5f08275b5defc1c45f0983667

drwx------  3 root root     30 5月  17 21:00 4f581962efbf4666456176106bd4be4ad294a6e43302b3fee94936d397d7f8fb

drwx------. 3 root root     30 5月  15 19:12 591ad68a7004eb28ddd0cea635505850b2b553654ae45ed4cf954146e7b58acb

drwx------  5 root root     69 7月  29 21:49 976a3aa29fb8f85ed7474b0ab7275511c7b7c2fad54613ec3c220ddc1b93c029

drwx------  4 root root     55 7月  29 16:54 976a3aa29fb8f85ed7474b0ab7275511c7b7c2fad54613ec3c220ddc1b93c029-init

drwx------. 4 root root     55 5月  15 20:22 99a4115a64a36da147e2ae653f8edfad90049761d95a91a2e8c3107223337405

drwx------  4 root root     55 7月  29 21:19 af0ca5122ff28863cde46e271728c674bdc1580f43384b6f95cea7d663215663

brw-------  1 root root 253, 0 7月  29 21:44 backingFsBlockDev

drwx------  4 root root     55 7月  29 21:19 c2761e7607341f4699fa3008f1c49aa3c45594141447959e986072165808acc2

drwx------. 2 root root   4096 7月  29 21:20 l

目录l(L的小写)存放缩写链接的目录,对应overlay2下的每层cachid目录下的diff目录,这是为了挂载命令不会超出长度。

                最底层只有diff和link文件,link文件内容是l目录里面的缩写连接名,实际就是对应diff目录,diff目录实际存放这一层的文件内容。

相关文章
相关标签/搜索