Docker入門第八章
Docker映象講解
映象是什麼
映象是一種輕量級,可執行的獨立軟體包,用來打包軟體執行環境和基本執行環境開發的軟體,它包含執行某個軟體所需的所有內容,包括程式碼,執行時,庫,環境變數和配置檔案。
Docker映象載入原理
UnionFS(聯合檔案系統)
UnionFS(聯合檔案系統):Union檔案系統(UnionFS)是一種分層,輕量級並且高效能的檔案系統,它支援對檔案系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬檔案系統下,Union檔案系統是Docker映象的基礎,映象可以通過分層來進行繼承,基於基礎映象(沒有父映象),可以製作各種具體應用映象。
特性:與此同時載入多個檔案系統,但從外面看起來,只能看到一個檔案系統,聯合載入會把各層檔案系統疊加起來,這樣最終的檔案系統會包含所有底層的檔案和目錄
Docker映象載入原理
docker的映象實際上由一層一層的檔案系統組成,這種層級的檔案系統UnionFS。
bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引導載入kernel,Linux剛啟動時會載入bootfs檔案系統,在Docker映象的最底層是bootfs,這一層與我們典型的Linux/Unix系統是一樣的,包含boot載入器和核心,當boot載入完成之後整個核心就都在記憶體中了,此時記憶體的使用權已由bootfs轉交給核心,此時系統也會解除安裝bootfs。
rootfs(root file system),在bootfs之上,包含的就是典型Linux系統中的/dev,/proc,/bin,/etc 等標準目錄和檔案,rootfs就是各種不同的作業系統發行版,比如Centos,Ubuntu等等。
平時我們安裝進虛擬機器的CentOS都是好幾個G,為什麼Docker這裡才200M?
對於一個精簡的OS,rootfs可以很小,只需要包含最基本的命令、工具和程式庫就可以了,因為底層直接使用Host的Kernel,自己只需要提供rootfs就可以了,由此可見對於不同的Linux發行版,bootfs基本是一致的,rootfs會有差別,因此不同的發行版可以公用bootfs。
分層理解
分層的映象
我們可以去下載一個映象,注意觀察下載的日誌輸出,可以看到是一層一層的在下載!
理解:
所有的Docker映象都起始於一個基礎映象層,當進行修改或增加新的內容時,就會在當前映象層之上,建立新的映象層,舉一個簡單的例子,假如基於Ubuntu Linux 16.04 建立一個新的映象,這就是新映象的第一層;如果在該映象中新增Python包,就會在基礎映象層之上建立第二個映象層;如果繼續新增一個安全補丁,就會建立第三個映象層。
該映象當前已經包含3個映象層,如下圖所示(這只是一個用於演示的很簡單的例子)。
在新增額外的映象層的同時,映象始終保持是當前所有映象的組合,理解這一點非常重要,下圖中舉了一個簡單的例子,每個映象層包含3個檔案,而映象包含了來自兩個映象層的6個檔案。
上圖中的映象層跟之前圖中的咯有區別,主要目的是便於展示檔案
下圖中展示了一個稍微複雜的三層映象,在外部看來整個映象只有6個檔案,這是因為最上層的檔案7是檔案5的一個更新版本。
這種情況下,上層映象層中的檔案覆蓋了底層映象層中的檔案。這樣就使得檔案的更新版本作為一個新映象層新增到映象當中。
Docker通過儲存引擎(新版本採用快照機制)的方式來實現映象層堆疊,並保證多映象層對外展示為統一的檔案系統。
Linux上可以用的儲存引擎有AUFS,Overlay2,Device Mapper,Btrfs以及ZFS。顧名思義,每種儲存引擎都基於Linux中對應的
檔案系統或者塊裝置技術,並且每種儲存引擎都有其獨有的效能特點。
Docker在Windows上僅支援windowsfilter一種儲存引擎,該引擎基於NTFS檔案系統之上實現了分層和CoW[1]
下圖展示了與系統顯示相同的三層映象,所有映象層堆疊併合並,對外提供統一的試圖。
特點
Docker映象都是隻讀的,當容器啟動時,一個新的可寫層被載入到映象的頂部!
這一層就是我們通常說的容器層,容器之下的都叫映象層!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
作者:呂世昊 出處:https://www.cnblogs.com/lvshihao/p/15170264.html個性簽名:學習如逆水行舟,不進則退!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,博主在此感謝!