Docker存儲驅動程序
理想情況下,將非常少的數據寫入容器的可寫層,並使用Docker卷來寫入數據。但是,某些工作負載要求您能夠寫入容器的可寫層。這是存儲驅動程序的用武之地。
Docker使用可插拔架構支持多種不同的存儲驅動程序。存儲驅動程序控制在Docker主機上存儲和管理映像和容器的方式。
閱讀完存儲驅動程序概述后,下一步是為工作負載選擇最佳存儲驅動程序。在做出此決定時,需要考慮三個高級別因素:
-
如果內核支持多個存儲驅動程序,則假設滿足該存儲驅動程序的先決條件,Docker會在沒有顯式配置存儲驅動程序的情況下列出要使用哪個存儲驅動程序的優先級列表:
-
如果可能,使用配置量最少的存儲驅動程序,例如
btrfs
或zfs
。其中每個都依賴於正確配置的后備文件系統。 -
否則,嘗試在最常見的情況下使用具有最佳整體性能和穩定性的存儲驅動程序。
-
overlay2
是首選,其次是overlay
。這些都不需要額外的配置。overlay2
是Docker CE的默認選擇。 -
devicemapper
是下一個,但需要direct-lvm
生產環境,因為loopback-lvm
,雖然零配置,性能非常差。
-
選擇順序在Docker的源代碼中定義。您可以通過查看Docker CE 18.03的源代碼來查看訂單。 如果您運行不同版本的Docker,可以使用文件查看器頂部的分支選擇器來選擇不同的分支。
-
-
您的選擇可能受Docker版本,操作系統和分發版的限制。例如,
aufs
僅在Ubuntu和Debian上支持,並且可能需要安裝額外的軟件包,而btrfs
僅在SLES上支持,而SLES僅支持Docker EE。見 每個Linux發行版支持存儲驅動程序。 -
某些存儲驅動程序要求您使用特定格式作為后備文件系統。如果您有使用特定支持文件系統的外部要求,這可能會限制您的選擇。見 支持后盾的文件系統。
-
在縮小了可供選擇的存儲驅動程序之后,您的選擇取決於工作負載的特性以及所需的穩定性級別。有關 幫助做出最終決定,請參閱其他注意事項
每個Linux發行版支持的存儲驅動
在較高級別,您可以使用的存儲驅動程序部分取決於您使用的Docker版本。
此外,Docker不建議任何需要您禁用操作系統安全功能的配置,例如在CentOS上selinux
使用overlay
或overlay2
驅動程序時需要禁用 。
Docker EE和CS-Engine
對於Docker EE和CS-Engine,支持存儲驅動程序的權威資源是 產品兼容性矩陣。要從Docker獲得商業支持,您必須使用支持的配置。
Docker CE
對於Docker CE,只測試了一些配置,並且您的操作系統內核可能不支持每個存儲驅動程序。通常,以下配置適用於最新版本的Linux發行版:
Linux發行版 | 推薦的存儲驅動 |
---|---|
Ubuntu上的Docker CE | aufs ,devicemapper ,overlay2 (Ubuntu的14.04.4或更高版本,16.04或更高版本), ,,overlay zfs vfs |
Debian上的Docker CE | aufs ,devicemapper ,overlay2 (Debian的擴展), overlay ,vfs |
CentOS上的Docker CE | devicemapper , vfs |
Fedora上的Docker CE | devicemapper ,overlay2 (Fedora 26或更高版本,實驗性),overlay (實驗性的),vfs |
如果可能,overlay2
是推薦的存儲驅動程序。第一次安裝Docker時,overlay2
默認使用。以前,aufs
在可用時是默認使用,但現在不再是這種情況。如果要aufs
在未來的新安裝中使用,則需要顯式配置它,並且可能需要安裝額外的軟件包,例如linux-image-extra
。見aufs。
在使用的現有安裝中aufs
,仍然使用它。
如果有疑問,最好的全能配置是使用具有支持overlay2
存儲驅動程序的內核的現代Linux發行版,並將Docker卷用於寫入繁重的工作負載,而不是依賴於將數據寫入容器的可寫層。
該vfs
存儲驅動程序通常不是最好的選擇。在使用vfs
存儲驅動程序之前,請務必閱讀 其性能和存儲特性和限制。
對非推薦存儲驅動程序的期望:Docker CE不提供商業支持,您可以在技術上使用適用於您的平台的任何存儲驅動程序。例如,您可以使用
btrfs
Docker CE,即使不建議在任何Docker CE平台上使用,您需要自擔風險。上表中的建議基於自動回歸測試以及已知適用於大量用戶的配置。如果您使用推薦的配置並找到可重現的問題,則可能會很快修復。如果根據此表不推薦您要使用的驅動程序,則可以自行承擔風險。您可以而且應該仍然報告您遇到的任何問題。但是,此類問題的優先級低於使用推薦配置時遇到的問題。
適用於Mac的Docker和適用於Windows的Docker
適用於Mac的Docker和適用於Windows的Docker適用於開發,而非生產。無法在這些平台上修改存儲驅動程序。
支持的后備文件系統
關於Docker,后備文件系統是所在的文件系統 /var/lib/docker/
。某些存儲驅動程序僅適用於特定的后備文件系統。
存儲驅動程序 | 支持的后備文件系統 |
---|---|
overlay , overlay2 |
ext4 , xfs |
aufs |
ext4 , xfs |
devicemapper |
direct-lvm |
btrfs |
btrfs |
zfs |
zfs |
其他考慮
適合您的工作量
除此之外,每個存儲驅動程序都有自己的性能特征,使其或多或少適合不同的工作負載。考慮以下概括:
aufs
,overlay
和overlay2
所有操作都在文件級而不是塊級操作。這樣可以更有效地使用內存,但容器的可寫層在寫入繁重的工作負載中可能會變得非常大。- 塊級存儲驅動器,例如
devicemapper
,btrfs
和zfs
執行的寫繁重的工作更好(雖然不是還有泊塢窗卷)。 - 對於許多小型寫入或具有多個層或深層文件系統的容器,
overlay
可能表現更好overlay2
。 btrfs
並zfs
需要大量的內存。zfs
是PaaS等高密度工作負載的理想選擇。
有關性能,適用性和最佳實踐的更多信息,請參閱每個存儲驅動程序的文檔。
共享存儲系統和存儲驅動程序
如果您的企業使用SAN,NAS,硬件RAID或其他共享存儲系統,則它們可以提供高可用性,增強的性能,精簡配置,重復數據刪除和壓縮。在許多情況下,Docker可以在這些存儲系統之上工作,但Docker並沒有與它們緊密集成。
每個Docker存儲驅動程序都基於Linux文件系統或卷管理器。請務必遵循在共享存儲系統之上運行存儲驅動程序(文件系統或卷管理器)的現有最佳實踐。例如,如果在共享存儲系統之上使用ZFS存儲驅動程序,請確保遵循在該特定共享存儲系統之上操作ZFS文件系統的最佳實踐。
穩定性
對於某些用戶而言,穩定性比性能更重要。雖然Docker認為這里提到的所有存儲驅動程序都是穩定的,但有些更新,並且仍在積極開發中。一般而言,aufs
是overlay
,並且 devicemapper
是具有最高穩定性的選擇。
經驗和專業知識
選擇您的組織可以輕松維護的存儲驅動程序。例如,如果您使用RHEL或其下游分支之一,您可能已經具有LVM和Device Mapper的經驗。如果是這樣,devicemapper
司機可能是最好的選擇。
使用您自己的工作負載進行測試
您可以在不同的存儲驅動程序上運行自己的工作負載時測試Docker的性能。確保使用等效的硬件和工作負載來匹配生產條件,以便您可以看到哪個存儲驅動程序提供了最佳的整體性能。
檢查當前的存儲驅動程序
每個存儲驅動程序的詳細文檔詳細說明了使用給定存儲驅動程序的所有設置步驟。
要查看Docker當前使用的存儲驅動程序,請使用docker info
並查找該Storage Driver
行:

要更改存儲驅動程序,請參閱新存儲驅動程序的特定說明。某些驅動程序需要其他配置,包括配置Docker主機上的物理或邏輯磁盤。
重要說明:更改存儲驅動程序時,任何現有鏡像和容器都將無法訪問。這是因為新存儲驅動程序無法使用它們的圖層。如果還原更改,則可以再次訪問舊圖像和容器,但是您使用新驅動程序提取或創建的任何內容都將無法訪問。