本節描述了 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時應該注意。
下圖列出了全部驅動,並列出了它們的優缺點。若是要選擇存儲驅動,那麼能夠參考下面提到的內容。
OverlayFS有兩種存儲驅動,它們使用了相同的OverlayFS技術,但卻有着不一樣的實現,在磁盤使用上也並不互相兼容。由於不兼容,二者之間的切換必須從新建立全部的鏡像。overlay驅動是最原始的OverlayFS實現,而且,在Docker1.11以前是僅有的OverlayFS驅動選擇。overlay驅動在inode消耗方面有着較明顯的限制,而且會損耗必定的性能。overlay2驅動解決了這種限制,不過只能在Linux kernel 4.0以上使用它。
因此,對於使用Linux kernel 4.0
以前的建議使用 overlay,以後的建議使用 overlay2。