自己動手寫docker筆記(3):Union File System分析

概述OverlayFS(overlay)的鏡像分層與共享:
OverlayFS使用兩個目錄逻卖,把一個目錄置放于另一個之上犬耻,并且對外提供單個統(tǒng)一的視角煎谍。這兩個目錄通常被稱作層坊萝,這個分層的技術(shù)被稱作union mount苛预。術(shù)語上句狼,下層的目錄叫做lowerdir,上層的叫做upperdir热某。對外展示的統(tǒng)一視圖稱作merged腻菇。


  上圖展示了Docker鏡像和Docker容器是如何分層的。鏡像層就是lowerdir苫拍,容器層是upperdir芜繁。暴露在外的統(tǒng)一視圖就是所謂的merged。

分析一波聯(lián)合文件系統(tǒng)绒极,具體概念不再贅述骏令。

首先使用docker info 查看自己主機(jī)上的文件系統(tǒng)驅(qū)動:

[root@dockcon ~]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 17.12.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 89623f28b87a6004d4b785663257362d1658a729
runc version: b2567b37d7b75eb4cf325b77297b140ea686ce8f
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-693.2.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.796GiB
Name: dockcon
ID: SMEH:O3GP:L26O:MMNZ:VPXN:VE7D:OWYX:RBD4:P3ZO:PI5E:XCHM:PVPU
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 http://3b13d85e.m.daocloud.io/
Live Restore Enabled: false

可以看到Storage Driver: overlay2就是本機(jī)的文件驅(qū)動,個人認(rèn)為絕大多數(shù)主機(jī)默認(rèn)Storage Driver: overlay2

overlay中鏡像和容器的磁盤結(jié)構(gòu)

查看下docker目錄有什么文件先:

[root@dockcon ~]# ls /var/lib/docker/
builder     containers  network   plugins   swarm  trust
containerd  image       overlay2  runtimes  tmp    volumes

可以看到有個overlay2驅(qū)動的文件夾

[root@dockcon ~]# ls /var/lib/docker/overlay2/
l
[root@dockcon ~]# ls /var/lib/docker/overlay2/l
[root@dockcon ~]# 

overlay2文件夾下只有一個名為"l"的文件夾垄提,其里面是沒有任何東西的

現(xiàn)在我們pull一個鏡像看看有什么變化:
docker pull ubuntu:16.04

[root@dockcon ~]# docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
50aff78429b1: Pull complete 
f6d82e297bce: Pull complete 
275abb2c8a6f: Pull complete 
9f15a39356d6: Pull complete 
fc0342a94c89: Pull complete 
Digest: sha256:ec0e4e8bf2c1178e025099eed57c566959bb408c6b478c284c1683bc4298b683
Status: Downloaded newer image for ubuntu:16.04
[root@dockcon ~]# ls -lh /var/lib/docker/overlay2/
總用量 24K
drwx------ 3 root root 4.0K 1月   5 18:11 272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d
drwx------ 4 root root 4.0K 1月   5 18:11 27f03471e446d3a55dfd21ebfd8f5dd26f08d530d5c55d47f0118738717060b5
drwx------ 4 root root 4.0K 1月   5 18:11 3856ca6fafc077314aaa5e60cf7950861156fabbe92881bc6bce5e68fcd2226d
drwx------ 4 root root 4.0K 1月   5 18:11 767844cd18e3ca77793b48673198cabbdcf7f2dd45b6f75e707f15595ec1a5e0
drwx------ 4 root root 4.0K 1月   5 18:11 9d7dcb47a9967120ec35c50979356fde3c4c4ec4817f347799ad9f5c2b0852a5
drwx------ 2 root root 4.0K 1月   5 18:11 l

上圖的輸出結(jié)果顯示pull了5個目錄包含了5個鏡像層榔袋,每一層在/var/lib/docker/overlay/下都有自己的目錄。還是再次提醒下铡俐,如你所見凰兑,Docker1.10之后,鏡像層和目錄名不再對應(yīng)审丘。 可以看到下載好鏡像文件后生成了5個文件夾:

可以細(xì)看下各大文件夾中有什么:
鏡像層目錄中吏够,共享的數(shù)據(jù)使用的是硬鏈接,他們的inode號大致相同

[root@dockcon ~]# ls -i /var/lib/docker/overlay2/272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/
524290 diff  524291 link
[root@dockcon ~]# ls -i /var/lib/docker/overlay2/3856ca6fafc077314aaa5e60cf7950861156fabbe92881bc6bce5e68fcd2226d/
529901 diff  529902 link  529904 lower  529903 work
[root@dockcon ~]# ls -i /var/lib/docker/overlay2/27f03471e446d3a55dfd21ebfd8f5dd26f08d530d5c55d47f0118738717060b5/
529855 diff  529856 link  529858 lower  529857 work
[root@dockcon ~]# ls -i /var/lib/docker/overlay2/767844cd18e3ca77793b48673198cabbdcf7f2dd45b6f75e707f15595ec1a5e0/
529824 diff  529825 link  529827 lower  529826 work
[root@dockcon ~]# ls -i /var/lib/docker/overlay2/9d7dcb47a9967120ec35c50979356fde3c4c4ec4817f347799ad9f5c2b0852a5/
529887 diff  529888 link  529890 lower  529889 work

l目錄包含了很多軟連接滩报,使用短名稱指向了其他層锅知。短名稱用于避免mount參數(shù)時達(dá)到頁面大小的限制。

[root@dockcon ~]# ls -l /var/lib/docker/overlay2/l
總用量 20
lrwxrwxrwx 1 root root 72 1月   5 18:11 3D2CWICPWSIPH7MGMMN547YEBT -> ../27f03471e446d3a55dfd21ebfd8f5dd26f08d530d5c55d47f0118738717060b5/diff
lrwxrwxrwx 1 root root 72 1月   5 18:11 4RXVMMWNWAOS5B2CMTCFXH7BRR -> ../9d7dcb47a9967120ec35c50979356fde3c4c4ec4817f347799ad9f5c2b0852a5/diff
lrwxrwxrwx 1 root root 72 1月   5 18:11 AXSD3MNZKXUUQONMUPF3M2HCEL -> ../3856ca6fafc077314aaa5e60cf7950861156fabbe92881bc6bce5e68fcd2226d/diff
lrwxrwxrwx 1 root root 72 1月   5 18:11 C7FGXOVWEZ6INXOALK3ADGFSA6 -> ../272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/diff
lrwxrwxrwx 1 root root 72 1月   5 18:11 TF4R7NB3BG3CEC4WXVQ2FRVOXC -> ../767844cd18e3ca77793b48673198cabbdcf7f2dd45b6f75e707f15595ec1a5e0/diff

在最低層中脓钾,有個link文件售睹,包含了前面提到的這個層對應(yīng)的短名稱;還有個diff目錄可训,包含了這個鏡像的內(nèi)容昌妹。

[root@dockcon ~]# ls /var/lib/docker/overlay2/
272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d  767844cd18e3ca77793b48673198cabbdcf7f2dd45b6f75e707f15595ec1a5e0
27f03471e446d3a55dfd21ebfd8f5dd26f08d530d5c55d47f0118738717060b5  9d7dcb47a9967120ec35c50979356fde3c4c4ec4817f347799ad9f5c2b0852a5
3856ca6fafc077314aaa5e60cf7950861156fabbe92881bc6bce5e68fcd2226d  l
[root@dockcon ~]# ls /var/lib/docker/overlay2/272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/
diff  link
[root@dockcon ~]# cat /var/lib/docker/overlay2/272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/link
C7FGXOVWEZ6INXOALK3ADGFSA6

可以看到這個link文件和“l(fā)”目錄下的第四個鏈接
C7FGXOVWEZ6INXOALK3ADGFSA6 -> ../272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/diff是對應(yīng)的

查看下diff目錄

[root@dockcon ~]# ls /var/lib/docker/overlay2/272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/diff/
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

可以看到當(dāng)前鏡像層下也是存在齊全的文件系統(tǒng)的

研究未完成~待續(xù)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捶枢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子飞崖,更是在濱河造成了極大的恐慌烂叔,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚜厉,死亡現(xiàn)場離奇詭異长已,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)昼牛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門术瓮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贰健,你說我怎么就攤上這事胞四。” “怎么了伶椿?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵辜伟,是天一觀的道長。 經(jīng)常有香客問我脊另,道長导狡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任偎痛,我火速辦了婚禮旱捧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘踩麦。我一直安慰自己枚赡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布谓谦。 她就那樣靜靜地躺著贫橙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪反粥。 梳的紋絲不亂的頭發(fā)上卢肃,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音才顿,去河邊找鬼莫湘。 笑死,一個胖子當(dāng)著我的面吹牛娜膘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播优质,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼竣贪,長吁一口氣:“原來是場噩夢啊……” “哼军洼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起演怎,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤匕争,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后爷耀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甘桑,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年歹叮,在試婚紗的時候發(fā)現(xiàn)自己被綠了跑杭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡咆耿,死狀恐怖德谅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萨螺,我是刑警寧澤窄做,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站慰技,受9級特大地震影響椭盏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吻商,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一掏颊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧手报,春花似錦蚯舱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揍鸟,卻和暖如春兄裂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阳藻。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工晰奖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腥泥。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓匾南,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蛔外。 傳聞我的和親對象是個殘疾皇子蛆楞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 一溯乒、Docker 簡介 Docker 兩個主要部件:Docker: 開源的容器虛擬化平臺Docker Hub: 用...
    R_X閱讀 4,382評論 0 27
  • 原文發(fā)布在:http://cizixs.com/2016/04/06/docker-images,轉(zhuǎn)載請注明出處豹爹。...
    cizixs閱讀 2,702評論 1 16
  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計(jì)算業(yè)界有什么大事件裆悄?Google Compute Engi...
    ahohoho閱讀 15,514評論 15 147
  • 一 、什么是 Docker Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國...
    Blazzer閱讀 3,132評論 0 13
  • “你確定要離開嗎臂聋?” “確定光稼,我已經(jīng)準(zhǔn)備好了” “你舍得你的爸媽,你的工作孩等,和這個熟悉的城市艾君?” “舍不得,可是我...
    浮生術(shù)閱讀 368評論 3 2