譯者沒(méi)有采取原文翻譯的方式,而是結(jié)合自己的學(xué)習(xí)進(jìn)行了歸納總結(jié)。
要想真正的理解docker的存儲(chǔ)驅(qū)動(dòng),需要先了解docker鏡像是如何構(gòu)建和存儲(chǔ),以及容器如何使用鏡像。
鏡像與分層
下面是ubuntu:15。04的鏡像分層。一共是4層,每一層都由一些只讀并且描繪系統(tǒng)區(qū)別的文件組成。
圖1 鏡像與分層
上下兩張圖對(duì)比,可以清晰的看到鏡像分層關(guān)系(上圖是官方文檔圖片,可以看到鏡像大小進(jìn)行了精簡(jiǎn),但是ubuntu:15。04鏡像的分層結(jié)構(gòu)沒(méi)變)。
圖2 分層
Docker存儲(chǔ)驅(qū)動(dòng)的作用就是:將這些分層的鏡像文件堆疊起來(lái),并且提供統(tǒng)一的視圖。使container的文件系統(tǒng)看上去和我們普通的文件系統(tǒng)沒(méi)什么區(qū)別。
當(dāng)創(chuàng)建一個(gè)新的容器的時(shí)候,實(shí)際上是在鏡像的分層上新添加了一層containerlayer(容器層)。之后所有對(duì)容器產(chǎn)生的修改,實(shí)際都只影響這一層。
圖3 分層
注意
容器與分層
鏡像與容器的一個(gè)主要區(qū)別就是,是否具有頂層的讀寫(xiě)層(可寫(xiě)層)。對(duì)于一個(gè)容器的數(shù)據(jù)新增,修改,都存儲(chǔ)在可寫(xiě)層。當(dāng)你刪除一個(gè)容器的時(shí)候,可寫(xiě)層也將被刪除(注意:可寫(xiě)層與數(shù)據(jù)卷的區(qū)別)。然而鏡像層是保持不變的。
下圖展示了,多個(gè)容器共享一個(gè)鏡像。鏡像層是只讀層,不變的。多個(gè)容器層在同一個(gè)鏡像層之上,并且相互獨(dú)立,互相不影響。
圖4 多個(gè)容器共享一個(gè)鏡像
docker存儲(chǔ)驅(qū)動(dòng)的職責(zé)就是將鏡像層和可寫(xiě)容器層管理起來(lái)。不同的驅(qū)動(dòng)實(shí)現(xiàn)管理的方式也不一致。實(shí)現(xiàn)容器與鏡像管理的兩個(gè)關(guān)鍵技術(shù)就是可堆疊的鏡像層和copy-on-write(CoW,寫(xiě)時(shí)復(fù)制)。
簡(jiǎn)述寫(xiě)時(shí)復(fù)制
舉個(gè)例子:小文和小武由不同的老師上數(shù)學(xué)課,但是他們只有一個(gè)習(xí)題冊(cè)。小文的作業(yè)是,練習(xí)冊(cè)的第十一頁(yè)。為了不影響到小武,小文的做法是將第11頁(yè)copy,完成作業(yè)后上交。這就是一個(gè)典型的寫(xiě)時(shí)復(fù)制
第一次修改一個(gè)文件,這個(gè)文件首先會(huì)從該讀寫(xiě)層下面的只讀層復(fù)制到該讀寫(xiě)層。該文件的只讀版本依然存在,但是已經(jīng)被讀寫(xiě)層中的該文件副本所隱藏。
了解了寫(xiě)時(shí)復(fù)制,就應(yīng)該注意一個(gè)問(wèn)題:如果第一次修改鏡像層內(nèi)包含的文件,文件的size很大。會(huì)造成大量的磁盤(pán)IO的開(kāi)銷(xiāo)。所以不建議將需要修改的大文件,集成到鏡像內(nèi)。可以采用數(shù)據(jù)卷的方式。
數(shù)據(jù)卷與存儲(chǔ)驅(qū)動(dòng)
當(dāng)一個(gè)容器刪除的時(shí)候,寫(xiě)入該容器的所有數(shù)據(jù)將被刪除(除了保存在數(shù)據(jù)卷中的數(shù)據(jù))
數(shù)據(jù)卷是掛載到容器的,docker宿主機(jī)上的一個(gè)目錄或文件。對(duì)數(shù)據(jù)卷的文件讀寫(xiě)是不受存儲(chǔ)驅(qū)動(dòng)控制的,接近于本地文件系統(tǒng)讀寫(xiě)速度。可以掛載多個(gè)數(shù)據(jù)卷到一個(gè)容器。也可以多個(gè)容器共享一個(gè)或多個(gè)數(shù)據(jù)卷。
如圖所示:一個(gè)docker宿主機(jī)運(yùn)行2個(gè)容器。每個(gè)容器有自己的存儲(chǔ)空間,存儲(chǔ)于宿主機(jī)本地文件系統(tǒng) /var/lib/docker/…另外有一個(gè)共享的數(shù)據(jù)卷在/data。掛載到兩個(gè)容器內(nèi)實(shí)現(xiàn)共享。
圖5 一個(gè)docker宿主機(jī)運(yùn)行2個(gè)容器
如何選擇存儲(chǔ)驅(qū)動(dòng)
docker目前支持的存儲(chǔ)驅(qū)動(dòng)有:OverlayFS,AUFS,Btrfs,DeviceMapper,VFS,ZFS。
docker的存儲(chǔ)驅(qū)動(dòng)目前并沒(méi)有一個(gè)通用的,完美的,適用于所有環(huán)境的存儲(chǔ)驅(qū)動(dòng)。所以需要根據(jù)自己的環(huán)境來(lái)有所選擇。
存儲(chǔ)驅(qū)動(dòng)在不斷的改進(jìn)與發(fā)展
如果從穩(wěn)定性上的考量,在安裝docker的時(shí)候會(huì)默認(rèn)根據(jù)你的系統(tǒng)環(huán)境配置選擇一個(gè)存儲(chǔ)驅(qū)動(dòng)。通常來(lái)說(shuō)使用這個(gè)默認(rèn)的驅(qū)動(dòng)將減少你遇到bug的機(jī)會(huì)。
如果你的團(tuán)隊(duì)使用過(guò)RHEL及其相關(guān)分支,你可能有關(guān)于LVM和DeviceMapper的經(jīng)驗(yàn)。這時(shí)建議你使用devicemapper存儲(chǔ)驅(qū)動(dòng)。
查看當(dāng)前docker引擎的存儲(chǔ)驅(qū)動(dòng)存儲(chǔ)驅(qū)動(dòng)
圖6 docker引擎的存儲(chǔ)驅(qū)動(dòng)
如圖所示:存儲(chǔ)驅(qū)動(dòng)類(lèi)型為aufs,宿主機(jī)文件系統(tǒng)的格式為extfs。
圖7 存儲(chǔ)驅(qū)動(dòng)與宿主機(jī)文件格式
圖8 設(shè)置docker的存儲(chǔ)驅(qū)動(dòng)
現(xiàn)狀與未來(lái)
許多人認(rèn)為OverlayFS是Docker存儲(chǔ)驅(qū)動(dòng)的未來(lái)。然而,它仍然不夠成熟。穩(wěn)定性上也不如一些成熟的存儲(chǔ)驅(qū)動(dòng),如:AUFS,devicemapper。
下面的圖表,顯示了每個(gè)存儲(chǔ)驅(qū)動(dòng)的優(yōu)勢(shì)以及不足,請(qǐng)參考:
圖9 每個(gè)存儲(chǔ)驅(qū)動(dòng)的優(yōu)勢(shì)以及不足
具體到某一個(gè)存儲(chǔ)驅(qū)動(dòng)
這部分介紹具體的存儲(chǔ)驅(qū)動(dòng)的實(shí)現(xiàn)方式,對(duì)于技術(shù)研究者可以參考學(xué)習(xí)。對(duì)于應(yīng)用實(shí)踐者,可以暫時(shí)止步。筆者看了這部分內(nèi)容,沒(méi)有進(jìn)行翻譯總結(jié)。留下待以后完成。
核心關(guān)注:拓步ERP系統(tǒng)平臺(tái)是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴(lài)品牌。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://m.guhuozai8.cn/
本文標(biāo)題:docker存儲(chǔ)驅(qū)動(dòng)知識(shí)歸納總結(jié)
本文網(wǎng)址:http://m.guhuozai8.cn/html/support/11121519605.html