Docker 儲存驅動程式

理想情況下,很少有資料寫入容器的可寫層,您使用 Docker 捲來寫入資料。但是,一些工作負載需要您能夠寫入容器的可寫層。這就是儲存驅動程式的作用。

Docker 支援多種儲存驅動程式,使用可插拔架構。儲存驅動程式控制如何在 Docker 主機上儲存和管理映象和容器。在閱讀完 儲存驅動程式概述 之後,下一步是為您的工作負載選擇最佳的儲存驅動程式。在大多數常見場景中,使用效能和穩定性最好的儲存驅動程式。

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

驅動程式說明
overlay2overlay2 是所有當前支援的 Linux 發行版的首選儲存驅動程式,不需要額外的配置。
fuse-overlayfsfuse-overlayfs 僅在舊主機上執行無根 Docker 時才首選,該主機不支援無根 overlay2fuse-overlayfs 驅動程式自 Linux 核心 5.11 以來無需使用,即使在無根模式下 overlay2 也能正常工作。有關詳細資訊,請參閱 無根模式文件
btrfszfsbtrfszfs 儲存驅動程式允許使用高階選項,例如建立“快照”,但需要更多的維護和設定。它們都依賴於備份檔案系統配置正確。
vfsvfs 儲存驅動程式旨在用於測試目的,以及在無法使用任何寫時複製檔案系統的情況下。該儲存驅動程式的效能很差,通常不推薦用於生產環境。

Docker Engine 擁有一個優先順序列表,用於在未明確配置儲存驅動程式的情況下使用哪個儲存驅動程式,假設儲存驅動程式滿足先決條件,並自動選擇一個相容的儲存驅動程式。您可以在 Docker Engine 27.1.1 的原始碼 中檢視。

某些儲存驅動程式要求您使用特定格式的備份檔案系統。如果您有外部要求使用特定的備份檔案系統,這可能會限制您的選擇。請參閱 支援的備份檔案系統

在縮小了您可以選擇的儲存驅動程式範圍之後,您的選擇將由工作負載的特徵以及您需要的穩定性級別決定。請參閱 其他注意事項 以幫助您做出最終決定。

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

注意

透過編輯守護程式配置檔案來修改儲存驅動程式在 Docker Desktop 上不受支援。僅支援預設的 overlay2 驅動程式或 containerd 儲存。下表也不適用於無根模式下的 Docker Engine。有關無根模式下可用的驅動程式,請參閱 無根模式文件

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

Linux 發行版推薦的儲存驅動程式備用驅動程式
Ubuntuoverlay2zfs, vfs
Debianoverlay2vfs
CentOSoverlay2zfs, vfs
Fedoraoverlay2zfs, vfs
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 主機上的物理或邏輯磁碟進行配置。

重要

更改儲存驅動程式後,任何現有的映象和容器都將無法訪問。這是因為它們的層無法被新的儲存驅動程式使用。如果您撤消更改,可以再次訪問舊映象和容器,但使用新驅動程式拉取或建立的任何映象和容器將無法訪問。