docker 存儲驅動(storage driver)知識總結


http://www.sohu.com/a/101016494_116235

一,先看docker鏡像是如何構建和存儲。

 

下面是ubuntu:15.04的鏡像分層.一共是4層,每一層都由一些只讀並且描繪系統區別的文件組成. 也可以使用命令  docker history ubuntu:15.04查看。

  

 

  Docker存儲驅動的作用就是:將這些分層的鏡像文件堆疊起來,並且提供統一的視圖.使container的文件系統看上去和我們普通的文件系統沒什么區別.

  當創建一個新的容器的時候,實際上是在鏡像的分層上新添加了一層container layer(容器層).之后所有對容器產生的修改,實際都只影響這一層.

 

 

 

 注意:

  容器層:讀寫層(可寫層)

  鏡像層:只讀層

 

鏡像與容器的一個主要區別就是,是否具有頂層的讀寫層(可寫層).

對於一個容器的數據新增,修改,都存儲在可寫層.當你刪除一個容器的時候,可寫層也將被刪除(注意:可寫層與數據卷的區別).然而鏡像層是保持不變的.

下圖展示了,多個容器共享一個鏡像.鏡像層是只讀層,不變的.多個容器層在同一個鏡像層之上,並且相互獨立,互相不影響.

 

   docker 存儲驅動的職責就是將鏡像層和可寫容器層管理起來.不同的驅動實現管理的方式也不一致.

    實現容器與鏡像管理的兩個關鍵技術就是可堆疊的鏡像層和copy-on-write (CoW,寫時復制).

 

數據卷與存儲驅動

當一個容器刪除的時候,寫入該容器的所有數據將被刪除(除了保存在數據卷中的數據)

數據卷是掛載到容器的,docker宿主機上的一個目錄或文件。對數據卷的文件讀寫是不受存儲驅動控制的,接近於本地文件系統讀寫速度.可以掛載多個數據卷到一個容器.也可以多個容器共享一個或多個數據卷.

 

如圖所示:一個docker宿主機運行2個容器。每個容器有自己的存儲空間,存儲於宿主機本地文件系統 /var/lib/docker/… 另外有一個共享的數據卷在 /data.掛載到兩個容器內實現共享.

 

 

docker目前支持的存儲驅動有:OverlayFS,AUFS,Btrfs,Device Mapper,VFS,ZFS。

docker的存儲驅動目前並沒有一個通用的,完美的,適用於所有環境的存儲驅動.所以需要根據自己的環境來有所選擇.

 

設置docker的存儲驅動  :

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM