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