docker 存儲驅動之overlay2

overlay2

overlay2原生支持128層,這提供docker build和docker commit更好的性能支持
在執行完docker pull ubuntu後,可以看到

$ ls -l /var/lib/docker/overlay2

total 24
drwx------ 5 root root 4096 Jun 20 07:36 223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7
drwx------ 3 root root 4096 Jun 20 07:36 3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b
drwx------ 5 root root 4096 Jun 20 07:36 4e9fa83caff3e8f4cc83693fa407a4a9fac9573deaf481506c102d484dd1e6a1
drwx------ 5 root root 4096 Jun 20 07:36 e8876a226237217ec61c4baf238a32992291d059fdac95ed6303bdff3f59cff5
drwx------ 5 root root 4096 Jun 20 07:36 eca1e4e1694283e001f200a667bb3cb40853cf2d1b12c29feda7422fed78afed
drwx------ 2 root root 4096 Jun 20 07:36 l

這個l目錄是新加的,這裏面都是軟連接文件目錄的簡寫標識,這個主要是爲了避免mount時候頁大小的限制

$ ls -l /var/lib/docker/overlay2/l

total 20
lrwxrwxrwx 1 root root 72 Jun 20 07:36 6Y5IM2XC7TSNIJZZFLJCS6I4I4 -> ../3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 B3WWEFKBG3PLLV737KZFIASSW7 -> ../4e9fa83caff3e8f4cc83693fa407a4a9fac9573deaf481506c102d484dd1e6a1/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 JEYMODZYFCZFYSDABYXD5MF6YO -> ../eca1e4e1694283e001f200a667bb3cb40853cf2d1b12c29feda7422fed78afed/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 NFYKDW6APBCCUCTOUSYDH4DXAT -> ../223c2864175491657d238e2664251df13b63adb8d050924fd1bfcdb278b866f7/diff
lrwxrwxrwx 1 root root 72 Jun 20 07:36 UL2MW33MSE3Q5VYIKBRN4ZAGQP -> ../e8876a226237217ec61c4baf238a32992291d059fdac95ed6303bdff3f59cff5/diff

然後我們看看具體的目錄下是什麼,如果是最下面的是沒有lower的

 ls /var/lib/docker/overlay2/3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/

diff  link

cat /var/lib/docker/overlay2/3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/link

6Y5IM2XC7TSNIJZZFLJCS6I4I4


ls  /var/lib/docker/overlay2/3a36935c9df35472229c57f4a27105a136f5e4dbef0f87905b2e506e494e348b/diff

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

lower從第二次開始

//最底層
cat 72dd847f8c4a40ce1762353c216d32e18db433b17c65e61ee1558758631fb59f/lower
cat: 72dd847f8c4a40ce1762353c216d32e18db433b17c65e61ee1558758631fb59f/lower: 沒有那個文件或目錄

//倒數第二次層
cat 91af527ebbb6357fb1694334be10105edd07432da7cb901ef17ecdaf28944442/lower
l/YSWCORVIDFAIEIAFPP5AWBJZ5G

//倒數第三次
cat 76bc3e1bdecdd1da6ecfea3086d7fecefa589e567da864fd5a4b910c04568bbb/lower
l/N7S5NM6TVQ4X7NFK7ROIQ6JOAP:l/YSWCORVIDFAIEIAFPP5AWBJZ5G

//倒數第四底層
cat 6d7bdb155539b21b411fe5a4b7ebd41a7bc92dfb5d0158b961622dee834e19d0/lower
l/Q7UBZ47OWOXEF4YL5POZBJ3UKY:l/N7S5NM6TVQ4X7NFK7ROIQ6JOAP:l/YSWCORVIDFAIEIAFPP5AWBJZ5G

//鏡像最上層
cat c249bc61bf63b4f39b316b30f0dbe83bc6b9425f6fc92b28dd9b36bf80308f5e/lower
l/JF7WPJE6K6CN5A7SSJEYDWWWMA:l/Q7UBZ47OWOXEF4YL5POZBJ3UKY:l/N7S5NM6TVQ4X7NFK7ROIQ6JOAP:l/YSWCORVIDFAIEIAFPP5AWBJZ5G

通過lower標識了鏡像的父層的分層關聯關係

diff記錄了本層的信息,

ll  91af527ebbb6357fb1694334be10105edd07432da7cb901ef17ecdaf28944442/diff/

drwxr-xr-x 4 root root 4096 1 26 02:23 etc
drwxr-xr-x 2 root root 4096 1 26 02:23 sbin
drwxr-xr-x 3 root root 4096 1 24 06:49 usr
drwxr-xr-x 3 root root 4096 1 24 06:49 var

如果是容器層,還會多一個merge層,這個和overlay的merge的概念是一樣的。譬如我啓動一個容器,並在var目錄下創建aaaa文件可以看到最上層的讀寫層


ll a1d281675ce2eacb0617b989ae846e29b8890954b8917b2919fbd025f537d7a0/diff/var/

-rw-r--r-- 1 root root 0 1 31 12:23 aaaa


ll a1d281675ce2eacb0617b989ae846e29b8890954b8917b2919fbd025f537d7a0/merged/var/

-rw-r--r-- 1 root root    0 1 31 12:23 aaaa
drwxr-xr-x 2 root root 4096 4 13 2016 backups
drwxr-xr-x 5 root root 4096 1 24 06:49 cache
drwxr-xr-x 1 root root 4096 2 5 2016 lib
drwxrwsr-x 2 root ftp  4096 4 13 2016 local
lrwxrwxrwx 1 root root    9 1 24 06:49 lock -> /run/lock
drwxr-xr-x 4 root root 4096 1 24 06:49 log
drwxrwsr-x 2 root mem  4096 1 24 06:49 mail
drwxr-xr-x 2 root root 4096 1 24 06:49 opt
lrwxrwxrwx 1 root root    4 1 24 06:49 run -> /run
drwxr-xr-x 2 root root 4096 1 24 06:49 spool
drwxrwxrwt 2 root root 4096 1 24 06:49 tmp

這裏如果啓動容器還有一點需要介紹,你會看到多了一個”讀寫層-init”,這個只讀層,它的目的是爲了初始化容器配置信息,譬如hostname等信息

ll a1d281675ce2eacb0617b989ae846e29b8890954b8917b2919fbd025f537d7a0-init/diff/etc/hostname 
-rwxr-xr-x 1 root root 0 1 31 12:21 a1d281675ce2eacb0617b989ae846e29b8890954b8917b2919fbd025f537d7a0-init/diff/etc/hostname

查看mount信息

 mount|grep overlay
overlay on /var/lib/docker/overlay2/a1d281675ce2eacb0617b989ae846e29b8890954b8917b2919fbd025f537d7a0/merged type 
overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/EETCZ74DSQUEXSCTWSVYKD6RSA:
/var/lib/docker/overlay2/l/MOZ5Z5Y6HVYMH2C5H4HCP64VPX:/var/lib/docker/overlay2/l/JF7WPJE6K6CN5A7SSJEYDWWWMA:
/var/lib/docker/overlay2/l/Q7UBZ47OWOXEF4YL5POZBJ3UKY:/var/lib/docker/overlay2/l/N7S5NM6TVQ4X7NFK7ROIQ6JOAP:
/var/lib/docker/overlay2/l/YSWCORVIDFAIEIAFPP5AWBJZ5G,
upperdir=/var/lib/docker/overlay2/a1d281675ce2eacb0617b989ae846e29b8890954b8917b2919fbd025f537d7a0/diff,
workdir=/var/lib/docker/overlay2/a1d281675ce2eacb0617b989ae846e29b8890954b8917b2919fbd025f537d7a0/work)

上面lowdir(只讀層),第一個是最上層,譬如EETCZ74DSQUEXSCTWSVYKD6RSA,這個順序很重要

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章