Docker存儲(一):存儲驅動程序的選擇

選擇存儲驅動程序

本節描述了 Docker 的存儲驅動程序特性。它列出了 Docker 支持的存儲驅動程序以及與管理它們相關聯的基本命令。最後,本頁提供了選擇存儲驅動程序的指南。node

本節的內容是爲已經瞭解存儲驅動程序技術的讀者準備的。python

可插拔存儲驅動架構

Docker有一個可插拔存儲驅動架構。這就能夠根據本身實際的環境和用例來選擇最適合的存儲驅動。每一個Docker存儲驅動程序都基於一個Linux文件系統或卷管理器。git

此外,每一個存儲驅動程序均可以自由地以本身獨特的方式實現對鏡像層和容器層的管理。這意味着在不一樣的環境下,某些存儲驅動程序的性能要優於其餘存儲驅動程序。github

一旦肯定了哪一個驅動程序是最好的,就能夠在啓動時在Docker daemon上設置這個驅動程序。所以,Docker守護進程只能運行一個存儲驅動程序,而且由該守護進程實例建立的全部容器都使用同一個存儲驅動程序。docker

下表顯示了所支持的存儲驅動程序技術及其驅動程序名稱:json

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

要知道守護進程上設置了哪一個存儲驅動程序,可使用docker info命令:後端

$ docker info

Containers: 0
Images: 0
Storage Driver: overlay
 Backing Filesystem: extfs
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.19.0-15-generic
Operating System: Ubuntu 15.04
... output truncated ...

說明:架構

(1)Docker daemon使用overlay做爲存儲驅動,而其Backing Filesystem是extfs。app

(2)extfs意味着 overlay 存儲驅動是在現有的(ext)文件系統上操做。ide

(3)後端文件系統指的是建立了Docker host的本地存儲區域/var/lib/docker的文件系統。

存儲驅動,能夠運行在某種後端文件系統上,但也有些不支持的後端文件系統,它們之間的對應關係以下表:

Storage driver 後端文件系統 不支持的後端文件系統
overlay ext4 xfs btrfs aufs overlay overlay2 zfs eCryptfs
overlay2 ext4 xfs btrfs aufs overlay overlay2 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

設置存儲驅動方式有兩種:

(1)能夠在dockerd啓動的時候加入--storage-driver=<name>如:

```python

 $ 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
  Logging Driver: json-file
  Kernel Version: 3.19.0-15-generic
  Operating System: Ubuntu 15.04
  <output truncated>
```

(2)更改配置文件

```python
#添加 daemon.json 文件
echo "{

 "storage-driver": "overlay2",

 "storage-opts": [ "overlay2.override_kernel_check=true" ],

 "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"],

 "live-restore" : false

}" >> /etc/docker/daemon.json
```

說明:存儲驅動的選擇會影響你容器應用的性能,因此頗有必要理解存儲驅動之間的區別和優缺點,而後才能選擇合適的驅動。

共享存儲系統和存儲驅動

不少企業都從共享文件系統(如SAN和NAS)中獲取存儲資源。一般狀況下,這都能帶來更好的性能和更高可用性,還有如超配、副本刪除、壓縮等高級特性。

Docker存儲驅動和數據卷均可以運行在這些共享存儲系統提供的存儲上,這使得Docker能夠利用這些系統提供的優越性能和可用性。然而,Docker並無與這些底層系統集成。

使用哪一種存儲驅動呢?

有幾個因素會影響存儲驅動程序的選擇。可是,必須記住這兩個事實:

(1)沒有哪一種驅動適合全部的用戶場景;

(2)存儲驅動一直都在提高和改進;

此外,下面的內容,也能夠提供一些指導意見。

穩定性

要得到最穩定、最輕鬆的Docker體驗,應該考慮如下幾點:

(1)使用您的發行版的默認存儲驅動程序。當Docker安裝時,它會根據系統的配置選擇一個默認的存儲驅動程序。穩定性是影響默認使用哪一種存儲驅動程序的重要因素。偏離此默認值可能會增長遇到bug和細微差異的概率。

(2)遵照CS Engine compatibility matrix指定的配置。CS Engine是Docker Engine的商業化版本,它代碼基於開源的Engine。不過它有一套限制的支持配置,而這個支持的配置使用最穩定成熟的存儲驅動。

經驗和專業技能

(1)選擇你和你的團隊都有經驗的一種存儲。好比,你使用RHEL系列的OS,你可能對LVM和Device Mapper頗有經驗,所以,你應該使用devicemapper存儲驅動。

(2)若是你對Docker提供的存儲驅動都沒有經驗,而且你但願使用簡單可用的穩定的Docker環境,那麼你能夠考慮使用你發行版默認的Docker存儲驅動。

面向將來

不少人認爲OverlayFS是Docker存儲驅動的將來。然而,它還不夠成熟,而且和aufs、devicemapper相比暫時還不夠穩定。所以,使用OverlayFS時應該注意。

下圖列出了全部驅動,並列出了它們的優缺點。若是要選擇存儲驅動,那麼能夠參考下面提到的內容。

0edGpd.md.png

Overlay vs Overlay2

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

因此,對於使用Linux kernel 4.0以前的建議使用 overlay,以後的建議使用 overlay2。

相關文章
相關標籤/搜索