Docker存儲驅動之總覽

簡介

  本文會介紹Docker存儲驅動的特性,別列出現在已經支持的存儲驅動,最後,會介紹如果選型適合你的存儲驅動。

可插拔的存儲驅動架構

  Docker的存儲驅動架構是可插拔的,可以讓你很方便的將適合你環境和用例的存儲驅動“插進”Docker。每個Docker存儲驅動都建立在一種Linux文件系統或者卷管理系統之上,也可以很自由地按照其自己的方法去實現鏡像層和容器層的管理。也就是說一些存儲驅動在不同的場景下會比其他的驅動性能更好。
  一旦你決定了哪種驅動最合適,你就可以Docker daemon啓動之前設置驅動到Docker中,這樣你就可以在該存儲驅動上運行Docker daemon了,所有新容器都會使用這個驅動來創建了。下圖顯示了支持的驅動技術和它們對應的Docker存儲驅動名稱。
  

Technology Storage driver name
OverlayFS overlay / overlay2
AUFS aufs
Btrfs btrfs
Device Mapper devicemapper
VFS vfs
ZFS zfs

  可以通過docker info命令來查看當前daemon使用着哪種存儲驅動。

$ docker info

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 1
Server Version: 1.12.6
Storage Driver: overlay2
 Backing Filesystem: extfs
... output truncated ...

  上面的輸出表示,Docker daemon使用overlay2作爲存儲驅動,而其Backing Filesystem是extfs。也就是說,在我的環境中,overlay2存儲驅動是在ext文件系統上操作的。後端文件系統指的是創建了Docker host的本地存儲區域/var/lib/docker的文件系統。
  存儲驅動,可以運行在某種後端文件系統上,但也有些不支持的後端文件系統,它們之間的對應關係如下表:

Storage driver 後端文件系統 不支持的後端文件系統
overlay ext4 xfs btrfs aufs overlay zfs eCryptfs
overlay2 ext4 xfs btrfs aufs overlay zfs eCryptfs
aufs ext4 xfs btrfs aufs eCryptfs
btrfs btrfs only N/A
devicemapper direct-lvm N/A
vfs debugging only N/A
zfs zfs only N/A

  想要設置存儲驅動,可以在dockerd啓動的時候加入–storage-driver=的參數,也可以設置DOCKER_OPTS選項到/etc/default/docker文件中。下面的命令顯示瞭如何在dockerd命令中使用devicemapper存儲驅動。

$ dockerd --storage-driver=devicemapper &

$ docker info

Containers: 0
Images: 0
Storage Driver: devicemapper
 Pool Name: docker-252:0-147544-pool
 Pool Blocksize: 65.54 kB
 Backing Filesystem: extfs
 Data file: /dev/loop0
 Metadata file: /dev/loop1
 Data Space Used: 1.821 GB
 Data Space Total: 107.4 GB
 Data Space Available: 3.174 GB
 Metadata Space Used: 1.479 MB
 Metadata Space Total: 2.147 GB
 Metadata Space Available: 2.146 GB
 Thin Pool Minimum Free Space: 10.74 GB
 Udev Sync Supported: true
 Deferred Removal Enabled: false
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
 Library Version: 1.02.90 (2014-09-01)
Execution Driver: native-0.2
<output truncated>

  存儲驅動的選擇會影響你容器應用的性能,所以很有必要理解存儲驅動之間的區別和優缺點,然後才能選擇合適的驅動。

共享存儲系統和存儲驅動

  很多企業都從共享文件系統(如SAN和NAS)中獲取存儲資源。通常情況下,這都能帶來更好的性能和更高可用性,還有如超配、副本刪除、壓縮等高級特性。
  Docker存儲驅動和數據卷都可以運行在這些共享存儲系統提供的存儲上,這使得Docker可以利用這些系統提供的優越性能和可用性。

使用哪種存儲驅動呢?

  很多方面都會影響存儲驅動的選擇,不過有兩點必須記住:
    ▶沒有哪種驅動適合所有的用戶場景;
    ▶存儲驅動一直都在提升和改進;
  此外,下面的內容,也可以提供一些指導意見。

穩定性

  爲了Docker環境更加穩定,你應該考慮一下一些建議:
    ▶使用你OS發行版默認的存儲驅動。安裝Docker時,它會根據你的系統選擇默認的存儲驅動,穩定性是它選擇的一個主要方面。
    ▶遵守CS Engine compatibility matrix指定的配置。CS Engine是Docker Engine的商業化版本,它代碼基於開源的Engine。不過它有一套限制的支持配置,而這個支持的配置使用最穩定成熟的存儲驅動。

經驗和專業技能

  選擇你和你的團隊都有經驗的一種存儲。比如,你使用RHEL系列的OS,你可能對LVM和Device Mapper很有經驗,因此,你應該使用devicemapper存儲驅動。
  如果你對Docker提供的存儲驅動都沒有經驗,並且你希望使用簡單可用的穩定的Docker環境,那麼你可以考慮使用你發行版默認的Docker存儲驅動。

未來

  很多人認爲OverlayFS是Docker存儲驅動的未來。然而,它還不夠成熟,並且和aufs、devicemapper相比暫時還不夠穩定。因此,使用OverlayFS時應該注意。
  下圖列出了所有驅動,並列出了它們的優缺點。如果要選擇存儲驅動,那麼可以參考下面提到的內容。
all storage drivers

Overlay vs Overlay2

  OverlayFS有兩種存儲驅動,它們使用了相同的OverlayFS技術,但卻有着不同的實現,在磁盤使用上也並不互相兼容。因爲不兼容,兩者之間的切換必須重新創建所有的鏡像。overlay驅動是最原始的OverlayFS實現,並且,在Docker1.11之前是僅有的OverlayFS驅動選擇。overlay驅動在inode消耗方面有着較明顯的限制,並且會損耗一定的性能。overlay2驅動解決了這種限制,不過只能在Linux kernel 4.0以上使用它。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章