?
This document uses PHP Chinese website manual Release
理想情況下,只有很少的數(shù)據(jù)寫入容器的可寫層,并且您使用Docker卷來寫入數(shù)據(jù)。但是,有些工作負(fù)載要求您能夠?qū)懭肴萜鞯目蓪憣?。這是存儲(chǔ)驅(qū)動(dòng)程序進(jìn)來的地方。
Docker支持多種不同的存儲(chǔ)驅(qū)動(dòng)程序,使用可插拔的架構(gòu)。存儲(chǔ)驅(qū)動(dòng)程序控制圖像和容器在Docker主機(jī)上的存儲(chǔ)和管理方式。
讀完存儲(chǔ)驅(qū)動(dòng)程序概述后,下一步是為工作負(fù)載選擇最佳的存儲(chǔ)驅(qū)動(dòng)程序。在作出這一決定時(shí),需要考慮三個(gè)高層次因素:
如果您的內(nèi)核支持多個(gè)存儲(chǔ)驅(qū)動(dòng)程序,那么假定滿足該存儲(chǔ)驅(qū)動(dòng)程序的先決條件,則在沒有明確配置存儲(chǔ)驅(qū)動(dòng)程序的情況下,Docker會(huì)列出要使用哪個(gè)存儲(chǔ)驅(qū)動(dòng)程序的優(yōu)先級列表:
- If `aufs` is available, default to it, because it is the oldest storage driver. However, it is not universally available.
- If possible, the storage driver with the least amount of configuration is used, such as `btrfs` or `zfs`. Each of these relies on the backing filesystem being configured correctly.
- Otherwise, try to use the storage driver with the best overall performance and stability in the most usual scenarios.
- `overlay2` is preferred, followed by `overlay`. Neither of these requires extra configuration.
- `devicemapper` is next, but requires `direct-lvm` for production environments, because `loopback-lvm`, while zero-configuration, has very poor performance.
選擇順序在Docker的源代碼中定義。通過查看源代碼,您可以看到Docker 17.03的訂單。對于不同的Docker版本,請將URL更改為該版本。
您的選擇可能會(huì)受到Docker版本,操作系統(tǒng)和分發(fā)版的限制。例如,aufs
僅在Ubuntu和Debian上受支持,而btrfs
僅在僅支持Docker EE的SLES上受支持。請參閱每個(gè)Linux分發(fā)支持存儲(chǔ)驅(qū)動(dòng)程序
某些存儲(chǔ)驅(qū)動(dòng)程序要求您為支持文件系統(tǒng)使用特定格式。如果您有使用特定支持文件系統(tǒng)的外部要求,這可能會(huì)限制您的選擇。請參閱支持的支持文件系統(tǒng)
在縮小了哪些存儲(chǔ)驅(qū)動(dòng)程序供您選擇之后,您的選擇將取決于您的工作負(fù)載特征和所需的穩(wěn)定級別。請參閱其他注意事項(xiàng)以幫助作出最終決定。
在較高級別上,您可以使用的存儲(chǔ)驅(qū)動(dòng)程序部分取決于您使用的Docker版本。
此外,Docker不建議任何需要禁用操作系統(tǒng)安全功能的配置,例如在CentOS上selinux
使用overlay
或overlay2
驅(qū)動(dòng)程序時(shí)需要禁用該功能。
對于Docker EE和CS-Engine,支持存儲(chǔ)驅(qū)動(dòng)程序的權(quán)威資源是產(chǎn)品兼容性矩陣。為了從Docker獲得商業(yè)支持,您必須使用受支持的配置。
對于Docker CE,只測試一些配置,并且操作系統(tǒng)的內(nèi)核可能不支持每個(gè)存儲(chǔ)驅(qū)動(dòng)程序。通常,以下配置適用于最新版本的Linux發(fā)行版:
Linux distribution | Recommended storage drivers |
---|---|
Docker CE on Ubuntu | aufs, devicemapper, overlay2 (Ubuntu 14.04.4 or later, 16.04 or later), overlay, zfs, vfs |
Docker CE on Debian | aufs, devicemapper, overlay2 (Debian Stretch), overlay, vfs |
Docker CE on CentOS | devicemapper, vfs |
Docker CE on Fedora | devicemapper, overlay2 (Fedora 26 or later, experimental), overlay (experimental), vfs |
如果有疑問,最好的全面配置是使用帶有支持overlay2
存儲(chǔ)驅(qū)動(dòng)程序的內(nèi)核的現(xiàn)代Linux發(fā)行版,并將Docker卷用于寫入繁重的工作負(fù)載,而不是依賴將數(shù)據(jù)寫入容器的可寫層。
vfs
存儲(chǔ)驅(qū)動(dòng)程序通常不是最好的選擇。在使用vfs
存儲(chǔ)驅(qū)動(dòng)程序之前,請務(wù)必閱讀其性能和存儲(chǔ)特性和限制。
非推薦存儲(chǔ)驅(qū)動(dòng)程序的預(yù)期:商業(yè)支持不適用于Docker CE,您可以在技術(shù)上使用可用于您的平臺的任何存儲(chǔ)驅(qū)動(dòng)程序。例如,你可以使用
btrfs
使用Docker CE,盡管在任何Docker CE平臺上都不推薦使用Docker CE,而且您自行承擔(dān)風(fēng)險(xiǎn)。上表中的建議基于自動(dòng)回歸測試以及已知可用于大量用戶的配置。如果您使用推薦的配置并發(fā)現(xiàn)可重現(xiàn)的問題,則可能會(huì)很快修復(fù)。如果根據(jù)此表不推薦您想使用的驅(qū)動(dòng)程序,則可以自行承擔(dān)風(fēng)險(xiǎn)。您可以也應(yīng)該報(bào)告您遇到的任何問題。但是,這些問題的優(yōu)先級低于使用推薦配置時(shí)遇到的問題。
適用于Mac的Docker和適用于Windows的Docker適用于開發(fā)而非生產(chǎn)。不支持在這些平臺上修改存儲(chǔ)驅(qū)動(dòng)程序。
關(guān)于Docker,后備文件系統(tǒng)就是所在的文件系統(tǒng)/var/lib/docker/
。某些存儲(chǔ)驅(qū)動(dòng)程序僅適用于特定的后備文件系統(tǒng)。
Storage driver | Supported backing filesystems |
---|---|
overlay, overlay2 | ext4, xfs |
aufs | ext4, xfs |
devicemapper | direct-lvm |
btrfs | btrfs |
zfs | zfs |
除此之外,每個(gè)存儲(chǔ)驅(qū)動(dòng)程序都有其自身的性能特征,使其或多或少地適用于不同的工作負(fù)載??紤]下面的概括:
aufs
,overlay
并且overlay2
全部在文件級而不是塊級操作。這更有效地使用內(nèi)存,但容器的可寫層可能在寫入繁重的工作負(fù)載中增長得相當(dāng)大。
塊級存儲(chǔ)驅(qū)動(dòng)程序(如devicemapper
,btrfs
)和zfs
更適合寫入繁重的工作負(fù)載(雖然不如Docker卷)。
對于許多具有許多圖層或深層文件系統(tǒng)的小型寫入或容器,overlay
可能會(huì)比overlay2
。
btrfs
并zfs
需要大量的內(nèi)存。
zfs
對于PaaS等高密度工作負(fù)載來說是一個(gè)不錯(cuò)的選擇。
有關(guān)性能,適用性和最佳做法的更多信息,請參閱每個(gè)存儲(chǔ)驅(qū)動(dòng)程序的文檔。
如果您的企業(yè)使用SAN,NAS,硬件RAID或其他共享存儲(chǔ)系統(tǒng),它們可能會(huì)提供高可用性,增強(qiáng)的性能,精簡配置,重復(fù)數(shù)據(jù)刪除和壓縮。在很多情況下,Docker可以在這些存儲(chǔ)系統(tǒng)之上工作,但Docker并沒有與它們緊密集成。
每個(gè)Docker存儲(chǔ)驅(qū)動(dòng)程序都基于Linux文件系統(tǒng)或卷管理器。請務(wù)必遵循現(xiàn)有的最佳實(shí)踐,以便在共享存儲(chǔ)系統(tǒng)之上操作存儲(chǔ)驅(qū)動(dòng)程序(文件系統(tǒng)或卷管理器)。例如,如果在共享存儲(chǔ)系統(tǒng)上使用ZFS存儲(chǔ)驅(qū)動(dòng)程序,請務(wù)必遵循在特定共享存儲(chǔ)系統(tǒng)之上操作ZFS文件系統(tǒng)的最佳實(shí)踐。
對于一些用戶來說,穩(wěn)定性比性能更重要。盡管Docker認(rèn)為這里提到的所有存儲(chǔ)驅(qū)動(dòng)都是穩(wěn)定的,但有些更新,并且仍在積極開發(fā)中。在一般情況下,aufs
,overlay
,和devicemapper
與穩(wěn)定性最高的選擇。
選擇一個(gè)您的組織很容易維護(hù)的存儲(chǔ)驅(qū)動(dòng)程序。例如,如果您使用RHEL或其下游分支,您可能已經(jīng)有LVM和設(shè)備映射器的使用經(jīng)驗(yàn)。如果是這樣,devicemapper
司機(jī)可能是最好的選擇。
在不同的存儲(chǔ)驅(qū)動(dòng)程序上運(yùn)行自己的工作負(fù)載時(shí),您可以測試Docker的性能。確保使用等效的硬件和工作負(fù)載來匹配生產(chǎn)條件,以便您可以看到哪個(gè)存儲(chǔ)驅(qū)動(dòng)程序提供了最佳的整體性能。
每個(gè)單獨(dú)存儲(chǔ)驅(qū)動(dòng)程序的詳細(xì)文檔詳細(xì)介紹了使用給定存儲(chǔ)驅(qū)動(dòng)程序的所有設(shè)置步驟。這是如何更改存儲(chǔ)驅(qū)動(dòng)程序的非常高級的摘要。
重要提示:一些存儲(chǔ)驅(qū)動(dòng)器類型,如
devicemapper
,btrfs
和zfs
,需要額外的設(shè)定,在操作系統(tǒng)級別,然后才能與Docker使用它們。
要查看Docker當(dāng)前使用的存儲(chǔ)驅(qū)動(dòng)程序,請使用docker info
以下Storage Driver
行:
$ docker info Containers: 0Images: 0Storage Driver: overlay Backing Filesystem: extfs<output truncated>
要設(shè)置存儲(chǔ)驅(qū)動(dòng)程序,請?jiān)?code>daemon.json位于/etc/docker/
Linux和C:\ProgramData\docker\config\
Windows Server 上的文件中設(shè)置該選項(xiàng)。不支持更改Docker for Mac或Docker for Windows上的存儲(chǔ)驅(qū)動(dòng)程序。
如果該daemon.json
文件不存在,請創(chuàng)建它。假設(shè)文件中沒有其他設(shè)置,它應(yīng)該具有以下內(nèi)容:
{ "storage-driver": "devicemapper"}
您可以指定任何有效的存儲(chǔ)驅(qū)動(dòng)程序來代替devicemapper
。
重新啟動(dòng)Docker以使更改生效。重新啟動(dòng)后,docker info
再次運(yùn)行以驗(yàn)證是否正在使用新的存儲(chǔ)驅(qū)動(dòng)程序。
關(guān)于圖像,容器和存儲(chǔ)驅(qū)動(dòng)程序
aufs
存儲(chǔ)驅(qū)動(dòng)程序的實(shí)踐
devicemapper
存儲(chǔ)驅(qū)動(dòng)程序的實(shí)踐
overlay
和overlay2
實(shí)踐中的存儲(chǔ)驅(qū)動(dòng)程序
btrfs
存儲(chǔ)驅(qū)動(dòng)程序的實(shí)踐
zfs
存儲(chǔ)驅(qū)動(dòng)程序的實(shí)踐