選擇儲存驅動程式

理想情況下,寫入容器可寫層的資料應該很少,並且您應該使用 Docker 捲來寫入資料。然而,有些工作負載要求您能夠寫入容器的可寫層。這就是儲存驅動程式的用武之地。

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

注意

本頁討論在 Linux 上的 Docker Engine 的儲存驅動程式。如果您在 Windows 主機作業系統上執行 Docker 守護程序,唯一支援的儲存驅動程式是 windowsfilter。更多資訊,請參閱 windowsfilter

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

驅動程式描述
overlay2overlay2 是所有當前支援的 Linux 發行版的首選儲存驅動程式,並且不需要額外配置。
fuse-overlayfs僅當在不支援 rootless 模式 overlay2 的舊主機上執行 Rootless Docker 時,才首選 fuse-overlayfs。自 Linux 核心 5.11 起,已無需使用 fuse-overlayfs 驅動程式,overlay2 甚至在 rootless 模式下也能工作。詳情請參閱 rootless 模式文件
btrfszfsbtrfszfs 儲存驅動程式允許使用高階選項,例如建立“快照”,但需要更多的維護和設定。它們每一個都依賴於正確配置的後端檔案系統。
vfsvfs 儲存驅動程式用於測試目的,以及在無法使用寫時複製(copy-on-write)檔案系統的情況下。此儲存驅動程式的效能較差,通常不建議在生產環境中使用。

如果未明確配置儲存驅動程式,Docker Engine 會有一個優先列表來決定使用哪個儲存驅動程式,前提是該儲存驅動程式滿足先決條件,並會自動選擇一個相容的儲存驅動程式。您可以在 Docker Engine 28.4.0 的原始碼中看到這個順序。

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

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

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

注意

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

您的作業系統和核心可能不支援每一種儲存驅動程式。例如,僅當您的系統使用 btrfs 作為儲存時,才支援 btrfs。總的來說,在最新版本的 Linux 發行版上,以下配置是可行的:

Linux 發行版推薦的儲存驅動程式備選驅動程式
Ubuntuoverlay2zfs, vfs
Debianoverlay2vfs
CentOSoverlay2zfs, vfs
Fedoraoverlay2zfs, vfs
SLES 15overlay2vfs
RHELoverlay2vfs

如有疑問,最好的通用配置是使用一個現代的 Linux 發行版,其核心支援 overlay2 儲存驅動程式,並對寫密集型工作負載使用 Docker 卷,而不是依賴於向容器的可寫層寫入資料。

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

上表中的建議已被大量使用者證明是可行的。如果您使用推薦的配置並發現一個可復現的問題,它很可能會很快被修復。如果您想使用的驅動程式不在此表的推薦之列,您可以自行承擔風險執行。您仍然可以並且應該報告您遇到的任何問題。但是,這類問題的優先順序低於使用推薦配置時遇到的問題。

根據您的 Linux 發行版,可能還有其他儲存驅動程式可用,例如 `btrfs`。這些儲存驅動程式在特定用例中可能有優勢,但可能需要額外的設定或維護,這使得它們不被推薦用於常見場景。有關詳細資訊,請參閱這些儲存驅動程式的文件。

支援的後端檔案系統

對於 Docker 而言,後端檔案系統是 /var/lib/docker/ 所在的檔案系統。一些儲存驅動程式只能與特定的後端檔案系統配合使用。

儲存驅動程式支援的後端檔案系統
overlay2xfs (ftype=1),ext4btrfs,(以及更多)
fuse-overlayfs任何檔案系統
btrfsbtrfs
zfszfs
vfs任何檔案系統
注意

大多數檔案系統如果具備所需的功能,應該都能工作。請查閱 OverlayFS 瞭解更多資訊。

其他注意事項

是否適合您的工作負載

除此之外,每個儲存驅動程式都有其自身的效能特點,使其或多或少地適合不同的工作負載。考慮以下概括:

  • 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 主機上的物理或邏輯磁碟的配置。

重要

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