天天看點

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

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

本節的内容是為已經了解存儲驅動程式技術的讀者準備的。

Docker有一個可插拔存儲驅動架構。這就可以根據自己實際的環境和用例來選擇最适合的存儲驅動。每個Docker存儲驅動程式都基于一個Linux檔案系統或卷管理器。

此外,每個存儲驅動程式都可以自由地以自己獨特的方式實作對鏡像層和容器層的管理。這意味着在不同的環境下,某些存儲驅動程式的性能要優于其他存儲驅動程式。

一旦确定了哪個驅動程式是最好的,就可以在啟動時在<code>Docker daemon</code>上設定這個驅動程式。是以,Docker守護程序隻能運作一個存儲驅動程式,并且由該守護程序執行個體建立的所有容器都使用同一個存儲驅動程式。

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

Technology

Storage driver name

OverlayFS

<code>overlay</code> or <code>overlay2</code>

AUFS

<code>aufs</code>

Btrfs

<code>btrfs</code>

Device Mapper

<code>devicemapper</code>

VFS

<code>vfs</code>

ZFS

<code>zfs</code>

要知道守護程序上設定了哪個存儲驅動程式,可以使用<code>docker info</code>指令:

說明:

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

(2)extfs意味着 overlay 存儲驅動是在現有的(ext)檔案系統上操作。

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

存儲驅動,可以運作在某種後端檔案系統上,但也有些不支援的後端檔案系統,它們之間的對應關系如下表:

Storage driver

後端檔案系統

不支援的後端檔案系統

<code>overlay</code>

<code>ext4</code> <code>xfs</code>

<code>btrfs</code> <code>aufs</code> <code>overlay</code> <code>overlay2</code> <code>zfs</code> <code>eCryptfs</code>

<code>overlay2</code>

<code>btrfs</code> <code>aufs</code> <code>eCryptfs</code>

<code>btrfs</code> only

N/A

<code>direct-lvm</code>

debugging only

<code>zfs</code> only

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

(1)可以在dockerd啟動的時候加入<code>--storage-driver=&amp;lt;name&amp;gt;</code>如:

(2)更改配置檔案

說明:存儲驅動的選擇會影響你容器應用的性能,是以很有必要了解存儲驅動之間的差別和優缺點,然後才能選擇合适的驅動。

很多企業都從共享檔案系統(如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時應該注意。

下圖列出了所有驅動,并列出了它們的優缺點。如果要選擇存儲驅動,那麼可以參考下面提到的内容。

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

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

是以,對于使用<code>Linux kernel 4.0</code>之前的建議使用 overlay,之後的建議使用 overlay2。