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目錄實際存放這一層的文件內容。

相關文章
相關標籤/搜索