當前位置:編程學習大全網 - 源碼下載 - Docker鏡像分層原理

Docker鏡像分層原理

參考鏈接:/runner 668/article/details/80955381

Docker支持通過擴展現有圖像來創建新圖像。

事實上,Docker Hub中99%的映像都是通過在基礎映像中安裝和配置所需的軟件來構建的。例如,我們現在構建壹個新的映像,docker文件如下:

構建過程如下圖所示。

正如您所看到的,新圖像是通過逐層疊加基礎圖像而生成的。每次妳安裝壹個軟件,妳就在現有的圖像上增加了壹層。

為什麽Docker mirror采用這種層級結構?

最大的好處之壹就是——* * *享受資源。

例如,如果多個映像都是從同壹個基礎映像構建的,Docker主機只需要在磁盤上保存壹個基礎映像的副本;同時,只需要在內存中加載壹個基本映像,就可以為所有容器提供服務。而且圖像的每壹層都可以被* * * *共享,後面我們會更深入的討論這個特性。

這時候可能有人會問:如果多個容器共享壹個基本映像,當壹個容器修改了基本映像的內容,比如/etc下的文件,那麽其他容器的/etc會被修改嗎?

答案是否定的!

修改將限於單個容器。

這就是我們接下來要討論的容器寫時復制特性。

新數據將直接存儲在頂層容器層。修改現有數據會先將數據從鏡像層復制到容器層,修改後的數據會直接保存在容器層,鏡像層保持不變。

如果多個層中存在同名文件,用戶只能看到頂層的文件。

當容器啟動時,壹個新的可寫層被加載到圖像的頂部。這壹層通常被稱為“容器層”,它下面的壹切被稱為“鏡像層”。

典型的Linux啟動後,首先將rootfs設置為readonly,執行壹系列檢查,然後切換為“readwrite”供用戶使用。在docker中,起初以readonly的方式加載和檢查rootfs,但隨後通過union mount在readonly的rootfs上掛載壹個readwrite文件系統,並允許下層文件系統再次設置為readonly並向上疊加。這樣的壹組readonly和壹個writeable結構構成了壹個容器的運行目錄,每個目錄稱為壹個層。如下圖所示。

對容器的所有更改,無論是添加、刪除還是修改文件,都只會發生在容器層。只有容器層是可寫的,容器層下的所有鏡像層都是只讀的。

讓我們深入討論壹下容器層的細節。

鏡像層的數量可能很大,並且所有鏡像層將聯合起來形成統壹的文件系統。如果不同層中有壹個路徑相同的文件,比如/a,上層的/a會覆蓋下層的/a,也就是說用戶只能訪問上層的文件/a。在容器層,用戶看到的是壹個疊加的文件系統。

這就解釋了我們前面提出的問題:容器層記錄了對圖像的修改,所有的圖像層都是只讀的,不會被容器修改,所以圖像可以被多個容器共享。

  • 上一篇:python可以用來幹嘛
  • 下一篇:合成營網上戰術對抗模擬訓練系統軟件?
  • copyright 2024編程學習大全網