選擇儲存驅動程式

理想情況下,很少有資料會寫入容器的可寫入層,而且您會使用 Docker 磁碟區來寫入資料。但是,某些工作負載需要您能夠寫入容器的可寫入層。這就是儲存驅動程式發揮作用的地方。

Docker 使用可插拔架構支援多個儲存驅動程式。儲存驅動程式控制如何在 Docker 主機上儲存和管理映像檔和容器。閱讀儲存驅動程式概觀之後,下一步是為您的工作負載選擇最佳儲存驅動程式。在最常見的情況下,使用具有最佳整體效能和穩定性的儲存驅動程式。

Docker 引擎在 Linux 上提供以下儲存驅動程式

驅動程式說明
overlay2overlay2 是所有目前支援的 Linux 發行版的首選儲存驅動程式,不需要額外設定。
fuse-overlayfsfuse-overlayfs 僅適用於在不支援無根 overlay2 的舊主機上執行無根 Docker。自 Linux 核心 5.11 起,就不需要使用 fuse-overlayfs 驅動程式,即使在無根模式下,overlay2 也能正常運作。詳細資訊請參閱無根模式文件
btrfszfsbtrfszfs 儲存驅動程式允許使用進階選項,例如建立「快照」,但需要更多維護和設定。這些選項都依賴正確設定的後端檔案系統。
vfsvfs 儲存驅動程式適用於測試目的,以及無法使用寫入時複製檔案系統的情況。此儲存驅動程式的效能不佳,通常不建議用於生產環境。

如果未明確設定儲存驅動程式,Docker 引擎會優先使用符合先決條件的儲存驅動程式,並自動選擇相容的儲存驅動程式。您可以在Docker Engine 27.3.1 的原始碼支援的後端檔案系統

縮小您可以選擇的儲存驅動程式範圍後,您的選擇取決於工作負載的特性和您需要的穩定性等級。請參閱其他考量以協助您做出最終決定。

每個 Linux 發行版支援的儲存驅動程式

注意事項

在 Docker Desktop 上,不支援透過編輯 daemon 設定檔來修改儲存驅動程式。僅支援預設的 overlay2 驅動程式或 containerd 儲存空間。下表也不適用於無根模式下的 Docker 引擎。如需無根模式下可用的驅動程式,請參閱 無根模式說明文件

您的作業系統和核心可能不支援所有儲存驅動程式。例如,只有在您的系統使用 btrfs 作為儲存空間時,才支援 btrfs。一般來說,以下設定適用於最新版本的 Linux 發行版。

Linux 發行版建議的儲存驅動程式替代驅動程式
Ubuntuoverlay2zfsvfs
Debianoverlay2vfs
CentOSoverlay2zfsvfs
Fedoraoverlay2zfsvfs
SLES 15overlay2vfs
RHELoverlay2vfs

如有疑慮,最佳的全方位設定是使用具有支援 overlay2 儲存驅動程式之核心的現代 Linux 發行版,並將 Docker 磁碟區用於寫入密集型工作負載,而不是依賴將資料寫入容器的可寫入層。

vfs 儲存驅動程式通常不是最佳選擇,主要用於在不支援其他儲存驅動程式的情況下進行除錯。在使用 vfs 儲存驅動程式之前,請務必閱讀 其效能、儲存特性和限制

上表中的建議已知適用於大量使用者。如果您使用建議的設定並發現可重現的問題,則很可能很快就會修復。如果您想要使用的驅動程式根據此表未被建議,您可以自行承擔風險執行它。您仍然可以且應該回報您遇到的任何問題。但是,此類問題的優先順序低於使用建議設定時遇到的問題。

根據您的 Linux 發行版,其他儲存驅動程式(例如 btrfs)可能可用。這些儲存驅動程式可能對特定使用案例具有優勢,但可能需要額外的設定或維護,因此不建議將其用於常見情況。有關詳細資訊,請參閱這些儲存驅動程式的說明文件。

支援的後端檔案系統

對於 Docker,後端檔案系統是 /var/lib/docker/ 所在的檔案系統。某些儲存驅動程式僅適用於特定的後端檔案系統。

儲存驅動程式支援的後端檔案系統
overlay2xfs (ftype=1)、ext4
fuse-overlayfs任何檔案系統
btrfsbtrfs
zfszfs
vfs任何檔案系統

其他考量

適用於您的工作負載

除了其他方面,每個儲存驅動程式都有其自身的效能特性,使其或多或少適用於不同的工作負載。請考慮以下一般情況:

  • overlay2 在檔案層級而不是區塊層級運作。這可以更有效地使用記憶體,但在寫入密集型工作負載中,容器的可寫入層可能會變得非常大。
  • 區塊層級儲存驅動程式(例如 btrfszfs)在寫入密集型工作負載中表現更好(儘管不如 Docker 磁碟區)。
  • btrfszfs 需要大量記憶體。
  • zfs 是高密度工作負載(例如 PaaS)的良好選擇。

每個儲存驅動程式的說明文件中提供了有關效能、適用性和最佳實務的更多資訊。

共用儲存系統和儲存驅動程式

如果您使用 SAN、NAS、硬體 RAID 或其他共用儲存系統,這些系統可能會提供高可用性、效能提升、精簡配置、重複資料刪除和壓縮。在許多情況下,Docker 可以在這些儲存系統之上工作,但 Docker 並未與它們緊密整合。

每個 Docker 儲存驅動程式都基於 Linux 檔案系統或磁碟區管理程式。請務必遵循現有的最佳實務,在您的共用儲存系統之上操作您的儲存驅動程式(檔案系統或磁碟區管理程式)。例如,如果在共用儲存系統之上使用 ZFS 儲存驅動程式,請務必遵循在該特定共用儲存系統之上操作 ZFS 檔案系統的最佳實務。

穩定性

對於某些使用者來說,穩定性比效能更重要。儘管 Docker 認為此處提到的所有儲存驅動程式都是穩定的,但有些驅動程式比較新,並且仍在積極開發中。一般來說,overlay2 提供最高的穩定性。

使用您自己的工作負載進行測試

您可以在不同儲存驅動程式上執行您自己的工作負載時測試 Docker 的效能。請務必使用等效的硬體和工作負載來匹配生產環境,以便您可以看到哪個儲存驅動程式提供最佳的整體效能。

檢查您目前的儲存驅動程式

每個儲存驅動程式的詳細說明文件都詳細說明了使用特定儲存驅動程式的所有設定步驟。

若要查看 Docker 目前正在使用哪個儲存驅動程式,請使用 docker info 並尋找 Storage Driver 行。

$ docker info

Containers: 0
Images: 0
Storage Driver: overlay2
 Backing Filesystem: xfs
<...>

若要變更儲存驅動程式,請參閱新儲存驅動程式的特定說明。某些驅動程式需要額外設定,包括 Docker 主機上實體或邏輯磁碟的設定。

重要事項

當您變更儲存驅動程式時,任何現有的映像檔和容器都將無法存取。這是因為新儲存驅動程式無法使用其圖層。如果您還原變更,則可以再次存取舊的映像檔和容器,但使用新驅動程式提取或建立的任何映像檔和容器將無法存取。