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的存儲驅動 :