选择存储驱动程序

理想情况下,写入容器可写层的数据应该很少,并且您应该使用 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 主机上的物理或逻辑磁盘的配置。

重要

当您更改存储驱动程序时,任何现有的镜像和容器都将变得不可访问。这是因为它们的层无法被新的存储驱动程序使用。如果您撤销更改,您可以再次访问旧的镜像和容器,但您使用新驱动程序拉取或创建的任何内容将变得不可访问。

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.