--- outline: [2, 5] --- # 选择存储驱动程序 理想情况下,写入容器的可写层的数据非常少,您可以使用 Docker 卷写入数据。但是,某些工作负载要求您能够写入容器的可写层。这就是存储驱动程序的用武之地。 Docker 使用可插拔架构支持多个存储驱动程序。这 存储驱动程序控制映像和容器在 Docker 主机。阅读完 [Storage Driver Overview](https://docs.docker.com/engine/storage/drivers/),下一步是为您的工作负载选择最佳存储驱动程序。在最常见的场景中,使用整体性能和稳定性最佳的存储驱动程序。 :::warning 注意 本页讨论 Linux 上 Docker Engine 的存储驱动程序。如果你是 以 Windows 作为主机操作系统运行 Docker 守护程序,这是唯一支持的 存储驱动程序是 WindowsFilter。有关更多信息,请参阅 [windows过滤器](https://docs.docker.com/engine/storage/drivers/windowsfilter-driver/)。 ::: Docker Engine 在 Linux 上提供以下存储驱动程序: Driver | 描述 | - | - | `overlay2` | `overlay2` 是当前支持的所有 Linux 发行版的首选存储驱动程序,不需要额外配置。 `fuse-overlayfs` | `fuse-overlayfs` 仅用于在不支持无根 `overlay2` 的旧主机上运行无根 Docker。从 Linux 内核 5.11 开始,不需要使用 `fuse-overlayfs` 驱动程序,即使在无根模式下,`overlay2` 也可以工作。请参阅 [rootless 模式文档](https://docs.docker.com/engine/security/rootless/)。 `btrfs` 和 `zfs` | `btrfs` 和 `zfs` 存储驱动程序允许使用高级选项,例如创建 “快照”,但需要更多的维护和设置。这些都依赖于正确配置的后备文件系统。 `vfs` | `vfs` 存储驱动程序用于测试目的,以及不能使用写入时复制文件系统的情况。此存储驱动程序的性能很差,通常不建议用于生产用途。 如果没有,Docker 引擎有一个要使用的存储驱动程序的优先级列表 存储驱动程序,假设存储驱动程序满足 先决条件,并自动选择兼容的存储驱动程序。你 可以在 [Docker Engine 27.4.0 的源代码](https://github.com/moby/moby/blob/v27.4.0/daemon/graphdriver/driver_linux.go#L52-L53)。 某些存储驱动程序要求您对后备文件系统使用特定格式。 如果您有使用特定后备文件系统的外部要求,这可能会 限制您的选择。看 [支持的后备文件系统](https://docs.docker.com/engine/storage/drivers/select-storage-driver/#supported-backing-filesystems)。 缩小可以选择的存储驱动程序的范围后,您的选择 由工作负载的特征和稳定性级别决定 你需要。看 [有助于](https://docs.docker.com/engine/storage/drivers/select-storage-driver/#other-considerations)做出最终决定的其他注意事项。 ## 每个 Linux 发行版支持的存储驱动程序 :::info 注意 Docker Desktop 不支持通过编辑守护程序配置文件来修改存储驱动程序。只有默认的 overlay2 驱动程序或 [containerd 存储](https://docs.docker.com/desktop/features/containerd/)。这 下表也不适用于无根中的 Docker 引擎 模式。有关在 rootless 模式下可用的驱动程序,请参阅 [无根模式文档](https://docs.docker.com/engine/security/rootless/)。 ::: 您的操作系统和内核可能不支持每个存储驱动程序。例如,仅当系统使用 `btrfs` 作为存储时,才支持 `btrfs`。通常,以下配置适用于最新版本的 Linux 发行版: Linux 发行版 | 推荐的存储驱动程序 | 其他驱动程序 | - | - | - | Ubuntu | `overlay2` | `zfs`, `vfs` Debian | `overlay2` | `vfs` CentOS | `overlay2` | `zfs`, `vfs` Fedora | `overlay2` | `zfs`, `vfs` SLES 15 | `overlay2` | `vfs` RHEL | `overlay2` | `vfs` 如有疑问,最好的全能配置是使用具有支持 `overlay2` 存储驱动程序的内核的现代 Linux 发行版,并将 Docker 卷用于写入密集型工作负载,而不是依赖将数据写入容器的可写层。 `vfs` 存储驱动程序通常不是最佳选择,主要用于在不支持其他存储驱动程序的情况下进行调试。在使用 `vfs` 存储驱动程序之前,请务必阅读 [其性能和存储特性和限制](https://docs.docker.com/engine/storage/drivers/vfs-driver/)。 众所周知,上表中的建议适用于大量用户。如果您使用推荐的配置并发现可重现的问题,则可能会很快得到修复。如果根据此表不推荐您要使用的驱动程序,您可以自行承担运行该驱动程序的风险。您可以而且仍然应该报告您遇到的任何问题。但是,此类问题的优先级低于使用推荐配置时遇到的问题。 根据您的 Linux 发行版,其他存储驱动程序(如 `btrfs`)可能可用。这些存储驱动程序对于特定用例可能具有优势,但可能需要额外的设置或维护,因此不建议将其用于常见场景。有关详细信息,请参阅这些存储驱动程序的文档。 ## 支持的后备文件系统 对于 Docker,后备文件系统是其中 `/var/lib/docker/` 的位置。某些存储驱动程序仅适用于特定的后备文件系统。 存储驱动程序 | 支持的后备文件系统 | - | - | `overlay2` | `xfs` with ftype=1, `ext4` `fuse-overlayfs` | 任何文件系统 `btrfs` | `btrfs` `zfs` | `zfs` `vfs` | 任何文件系统 ## 其他注意事项 ### 适合您的工作负载 此外,每个存储驱动程序都有自己的性能特征,使其或多或少适合不同的工作负载。考虑以下概括: - `overlay2` 在文件级别而不是块级别运行。这样可以更有效地使用内存,但在写入密集型工作负载中,容器的可写层可能会变得相当大。 - 块级存储驱动程序(如 `btrfs` 和 `zfs`)对于写入密集型工作负载(尽管不如 Docker 卷)性能更好。 - `btrfs` 和 `zfs` 需要大量内存。 - `zfs` 是 PaaS 等高密度工作负载的不错选择。 有关性能、适用性和最佳实践的更多信息,请参阅每个存储驱动程序的文档。 ### 共享存储系统和存储驱动程序 如果您使用 SAN、NAS、硬件 RAID 或其他共享存储系统,这些系统可能会提供高可用性、更高的性能、精简配置、重复数据删除和压缩。在许多情况下,Docker 可以在这些存储系统之上工作,但 Docker 并未与它们紧密集成。 每个 Docker 存储驱动程序都基于 Linux 文件系统或卷管理器。请务必遵循现有的最佳实践,在共享存储系统上运行存储驱动程序(文件系统或卷管理器)。例如,如果在共享存储系统上使用 ZFS 存储驱动程序,请确保遵循在该特定共享存储系统上运行 ZFS 文件系统的最佳实践。 ### 稳定性 对于一些用户来说,稳定性比性能更重要。尽管 Docker 认为此处提到的所有存储驱动程序都是稳定的,但有些驱动程序较新,仍在积极开发中。通常,`overlay2` 提供最高的稳定性。 ### 使用您自己的工作负载进行测试 您可以在不同的存储驱动程序上运行自己的工作负载时测试 Docker 的性能。确保使用等效的硬件和工作负载来匹配生产条件,以便您可以查看哪个存储驱动程序提供最佳的整体性能。 ## 检查您当前的存储驱动程序 每个存储驱动程序的详细文档详细介绍了使用给定存储驱动程序的所有设置步骤。 要查看 Docker 当前正在使用的存储驱动程序,请使用 `docker info` 并查找 `Storage Driver` 行: ```bash docker info Containers: 0 Images: 0 Storage Driver: overlay2 Backing Filesystem: xfs <...> ``` 要更改存储驱动程序,请参阅新存储驱动程序的具体说明。某些驱动程序需要额外的配置,包括对 Docker 主机上的物理或逻辑磁盘的配置。 :::danger 重要 更改存储驱动程序时,任何现有映像和容器都将变得不可访问。这是因为新的存储驱动程序无法使用它们的层。如果您还原更改,则可以再次访问旧映像和容器,但使用新驱动程序提取或创建的任何映像和容器都将无法访问。 ::: ## 相关信息 - [存储驱动程序][1] - [`overlay2` 存储驱动程序][2] - [`btrfs` 存储驱动程序][3] - [`zfs` 存储驱动程序][4] - [`WindowsFilter` 存储驱动程序][5] [1]:https://baidu.com [2]:https://baidu.com [3]:https://baidu.com [4]:https://baidu.com [5]:https://baidu.com [6]:https://baidu.com