©
本文档使用
php.cn手册 发布
理想情况下,只有很少的数据写入容器的可写层,并且您使用Docker卷来写入数据。但是,有些工作负载要求您能够写入容器的可写层。这是存储驱动程序进来的地方。
Docker支持多种不同的存储驱动程序,使用可插拔的架构。存储驱动程序控制图像和容器在Docker主机上的存储和管理方式。
读完存储驱动程序概述后,下一步是为工作负载选择最佳的存储驱动程序。在作出这一决定时,需要考虑三个高层次因素:
如果您的内核支持多个存储驱动程序,那么假定满足该存储驱动程序的先决条件,则在没有明确配置存储驱动程序的情况下,Docker会列出要使用哪个存储驱动程序的优先级列表:
- If `aufs` is available, default to it, because it is the oldest storage driver. However, it is not universally available.
- If possible, the storage driver with the least amount of configuration is used, such as `btrfs` or `zfs`. Each of these relies on the backing filesystem being configured correctly.
- Otherwise, try to use the storage driver with the best overall performance and stability in the most usual scenarios.
- `overlay2` is preferred, followed by `overlay`. Neither of these requires extra configuration.
- `devicemapper` is next, but requires `direct-lvm` for production environments, because `loopback-lvm`, while zero-configuration, has very poor performance.
选择顺序在Docker的源代码中定义。通过查看源代码,您可以看到Docker 17.03的订单。对于不同的Docker版本,请将URL更改为该版本。
您的选择可能会受到Docker版本,操作系统和分发版的限制。例如,aufs
仅在Ubuntu和Debian上受支持,而btrfs
仅在仅支持Docker EE的SLES上受支持。请参阅每个Linux分发支持存储驱动程序
某些存储驱动程序要求您为支持文件系统使用特定格式。如果您有使用特定支持文件系统的外部要求,这可能会限制您的选择。请参阅支持的支持文件系统
在缩小了哪些存储驱动程序供您选择之后,您的选择将取决于您的工作负载特征和所需的稳定级别。请参阅其他注意事项以帮助作出最终决定。
在较高级别上,您可以使用的存储驱动程序部分取决于您使用的Docker版本。
此外,Docker不建议任何需要禁用操作系统安全功能的配置,例如在CentOS上selinux
使用overlay
或overlay2
驱动程序时需要禁用该功能。
对于Docker EE和CS-Engine,支持存储驱动程序的权威资源是产品兼容性矩阵。为了从Docker获得商业支持,您必须使用受支持的配置。
对于Docker CE,只测试一些配置,并且操作系统的内核可能不支持每个存储驱动程序。通常,以下配置适用于最新版本的Linux发行版:
Linux distribution | Recommended storage drivers |
---|---|
Docker CE on Ubuntu | aufs, devicemapper, overlay2 (Ubuntu 14.04.4 or later, 16.04 or later), overlay, zfs, vfs |
Docker CE on Debian | aufs, devicemapper, overlay2 (Debian Stretch), overlay, vfs |
Docker CE on CentOS | devicemapper, vfs |
Docker CE on Fedora | devicemapper, overlay2 (Fedora 26 or later, experimental), overlay (experimental), vfs |
如果有疑问,最好的全面配置是使用带有支持overlay2
存储驱动程序的内核的现代Linux发行版,并将Docker卷用于写入繁重的工作负载,而不是依赖将数据写入容器的可写层。
vfs
存储驱动程序通常不是最好的选择。在使用vfs
存储驱动程序之前,请务必阅读其性能和存储特性和限制。
非推荐存储驱动程序的预期:商业支持不适用于Docker CE,您可以在技术上使用可用于您的平台的任何存储驱动程序。例如,你可以使用
btrfs
使用Docker CE,尽管在任何Docker CE平台上都不推荐使用Docker CE,而且您自行承担风险。上表中的建议基于自动回归测试以及已知可用于大量用户的配置。如果您使用推荐的配置并发现可重现的问题,则可能会很快修复。如果根据此表不推荐您想使用的驱动程序,则可以自行承担风险。您可以也应该报告您遇到的任何问题。但是,这些问题的优先级低于使用推荐配置时遇到的问题。
适用于Mac的Docker和适用于Windows的Docker适用于开发而非生产。不支持在这些平台上修改存储驱动程序。
关于Docker,后备文件系统就是所在的文件系统/var/lib/docker/
。某些存储驱动程序仅适用于特定的后备文件系统。
Storage driver | Supported backing filesystems |
---|---|
overlay, overlay2 | ext4, xfs |
aufs | ext4, xfs |
devicemapper | direct-lvm |
btrfs | btrfs |
zfs | zfs |
除此之外,每个存储驱动程序都有其自身的性能特征,使其或多或少地适用于不同的工作负载。考虑下面的概括:
aufs
,overlay
并且overlay2
全部在文件级而不是块级操作。这更有效地使用内存,但容器的可写层可能在写入繁重的工作负载中增长得相当大。
块级存储驱动程序(如devicemapper
,btrfs
)和zfs
更适合写入繁重的工作负载(虽然不如Docker卷)。
对于许多具有许多图层或深层文件系统的小型写入或容器,overlay
可能会比overlay2
。
btrfs
并zfs
需要大量的内存。
zfs
对于PaaS等高密度工作负载来说是一个不错的选择。
有关性能,适用性和最佳做法的更多信息,请参阅每个存储驱动程序的文档。
如果您的企业使用SAN,NAS,硬件RAID或其他共享存储系统,它们可能会提供高可用性,增强的性能,精简配置,重复数据删除和压缩。在很多情况下,Docker可以在这些存储系统之上工作,但Docker并没有与它们紧密集成。
每个Docker存储驱动程序都基于Linux文件系统或卷管理器。请务必遵循现有的最佳实践,以便在共享存储系统之上操作存储驱动程序(文件系统或卷管理器)。例如,如果在共享存储系统上使用ZFS存储驱动程序,请务必遵循在特定共享存储系统之上操作ZFS文件系统的最佳实践。
对于一些用户来说,稳定性比性能更重要。尽管Docker认为这里提到的所有存储驱动都是稳定的,但有些更新,并且仍在积极开发中。在一般情况下,aufs
,overlay
,和devicemapper
与稳定性最高的选择。
选择一个您的组织很容易维护的存储驱动程序。例如,如果您使用RHEL或其下游分支,您可能已经有LVM和设备映射器的使用经验。如果是这样,devicemapper
司机可能是最好的选择。
在不同的存储驱动程序上运行自己的工作负载时,您可以测试Docker的性能。确保使用等效的硬件和工作负载来匹配生产条件,以便您可以看到哪个存储驱动程序提供了最佳的整体性能。
每个单独存储驱动程序的详细文档详细介绍了使用给定存储驱动程序的所有设置步骤。这是如何更改存储驱动程序的非常高级的摘要。
重要提示:一些存储驱动器类型,如
devicemapper
,btrfs
和zfs
,需要额外的设定,在操作系统级别,然后才能与Docker使用它们。
要查看Docker当前使用的存储驱动程序,请使用docker info
以下Storage Driver
行:
$ docker info Containers: 0Images: 0Storage Driver: overlay Backing Filesystem: extfs<output truncated>
要设置存储驱动程序,请在daemon.json
位于/etc/docker/
Linux和C:\ProgramData\docker\config\
Windows Server 上的文件中设置该选项。不支持更改Docker for Mac或Docker for Windows上的存储驱动程序。
如果该daemon.json
文件不存在,请创建它。假设文件中没有其他设置,它应该具有以下内容:
{ "storage-driver": "devicemapper"}
您可以指定任何有效的存储驱动程序来代替devicemapper
。
重新启动Docker以使更改生效。重新启动后,docker info
再次运行以验证是否正在使用新的存储驱动程序。
关于图像,容器和存储驱动程序
aufs
存储驱动程序的实践
devicemapper
存储驱动程序的实践
overlay
和overlay2
实践中的存储驱动程序
btrfs
存储驱动程序的实践
zfs
存储驱动程序的实践