Docker 存储驱动程序选择
一般情况下,很少数据被写入到容器层,这通常采用数据卷挂载方式完成数据写操作。但是,部分情况下,需要向容器可写层写入数据,这便是存储驱动的作用。
Docker支持多种 可插入体系结构(支持本地的文件系统)的存储驱动程序。存储驱动控制决定着镜像和容器在docker 主机上的管理和存储方式。了解了docker存储概要后,下一步选择最佳的存储驱动程序,在选择驱动程序时,需要考虑如下三个重要因素:
·1如果操作系统内核支持多种存储驱动程序,如果没有明确配置存储驱动,docker 将提供一个最有的可选列表(假设可选项满足条件)。
.2 在最常见的场景中使用具有最佳总体性能和稳定性的存储驱动程序。同时选择的存储驱动被宿主文件系统支持。
.3 缩小了驱动选择范围后,考虑工作负载特性和驱动稳定性级别。
- Docker 支持的驱动
Overlay2驱动: 当前所有linux发行版的 首选存储驱动程序,不需要额外的配置。
aufs: 运行在Ubuntu 14.04,内核3.13上,不支持overlay2存储驱动时,docker 在18.06及以前的版本上首选存储驱动
devicemapper驱动: CentOS和Redhat 平台上推荐的存储驱动,仅当内核不支持overlay2驱动。然而,目前大部分的CentOS,Redhat 平台支持overlay2。Devicemapper支持两个模式,默认loopback-lvm ,性能差,不建议使用,生成上建议使用direct-lvm。
Btrfs,zfs驱动: 该驱动程序要求 宿主文件系统也是使用该驱动。该文件存储驱动拥有部分高级设置,例如生成系统快照,但时需要更多的人工操作和配置,同时要求后台文件系统正确配置。
vfs驱动:目前仅用于测试,仅仅适用于不能实现写时复制操作的文件系统,而且性能差,不建议生产使用。
- 不同发行版本的存储驱动支持
从高层次需求讲,选择不同的存储驱动主要决定于所选择的docker版本。此外,使用docker需要关闭操作系统安全特性配置,例如在CentOS上使用overlay 或者overlay2驱动需要关闭selinux.
Docker 引擎发展至今,大方向上分为两个版本,企业版(docker-ee)和社区版(docker-ce),企业版部分功能收费,社区版免费开放使用。针对每个大版本,又有多个小版本,这里主要介绍针对社区版不同linux发行版本上docker存储驱动的介绍。企业版请参数地址内容:https://success.docker.com/article/compatibility-matrix 。
对于docker-ce,操作系统不可能支持每种存储驱动程序,一般来讲,针对最新的docker,如下配置,适用于任何linux发行版本:
发行版本 | 建议的存储驱动 | 可选存储驱动 |
Ubuntu | 1,overlay2 2.aufs(unbuntu 14.04 ,3.13 kernel) |
|
Debian |
| overlay, vfs |
CentOS | overlay2 |
|
Fedora | overlay2 |
|
注意:overlay 存储驱动已经在docker-ce 18.09版本中被弃用,而且在未来版本中,将被删除,推荐使用overlay的升级版overlay2
Devicemapper存储驱动在docker-ce 18.09版本中被弃用,未来版本中也将可能被删除,建议使用 overlay2。
在window,mac平台,无法修改存储驱动。
因此如果可能,建议使用overlay2作为存储驱动程序。第一次安装Docker时,会默认使用的是overlay2。以前,aufs在默认情况下是可用的,但是目前已不会。如果希望在以后安装中使用aufs,需要显式地配置它,并且可能需要安装额外的包,比如linux-image-extra。
具体见: https://docs.docker.com/storage/storagedriver/aufs-driver/
- 支持的宿主文件系统
Docker运行在宿主系统上,其镜像和容器均存储在宿主文件系统上,因此 docker内的存储驱动需要得到宿主上文件系统的支持,主要是docker主目录所在的盘的文件系统,默认主目录为:/var/lib/docker,一些存储驱动程序运行需要指定的宿主文件系统。
Docker内存储驱动 | 主持的宿主文件系统 |
overlay2 overlay |
|
aufs | Xfs,ext4 |
devicemapper | direct-lvm |
btrfs | btrfs |
zfs | zfs |
vfs | 所有文件系统 |
- 其他条件
4.1 适合的工作负载
除上层环境支持之外,每个存储驱动程序都有自己的性能特征,这使得它或多或少适合于不同的工作负载。考虑以下概括:
1.aufs,overlay2 和overlay存储驱动,所有操作基于文件级别而不是块级别,提高了内存使用效率,但是容器的可写层可能会在写负载较大的情况下增长得相当大。
2.块级别的操作的存储驱动类似devicemapper, btrfs,zfs 在写如在较大时表现出更好新能,但相对数据卷,还是略差。
3.针对小型写操作,或者具有多层的容器,overlay可能比overlay2执行得更好,但是会消耗更多的inode,导致inode耗尽。
4.btrfs,zfs需要消耗更多内存。
5.针对高密度工作负载,zfs是一个好的选择,例如PaaS,
4.2 共享存储系统
如果企业使用SAN、NAS、硬件RAID或其他共享存储系统,它们可能提供高可用性、提高性能、精简配置、重复数据删除和压缩。在许多情况下,Docker可以在这些存储系统上工作,但docker 无法紧密集成它们。
每个Docker存储驱动程序都基于Linux文件系统或卷管理器。在共享存储系统上操作存储驱动程序(文件系统或卷管理器)时,请确保遵循现有的最佳实践。例如,如果在共享存储系统上使用ZFS存储驱动程序,请确保遵循在特定共享存储系统上操作ZFS文件系统的最佳实践
4.3 稳定性
对于一些用户来说,稳定性比性能更重要。虽然Docker认为这里提到的存储驱动程序都是稳定的,但是有些是更新的,并且仍在积极开发中。通常,overlay2、aufs、overlay和devicemapper是稳定性最高的选择。
4.4 本地测试
您可以在不同的存储驱动程序上运行自己的程序测试Docker的性能。确保使用等效的硬件和工作负载来匹配生产条件,这样您就可以看到哪个存储驱动程序提供了最佳的总体性能。
五,检差当前docker存储驱动
使用语句 docker info / docker system info
具体每种驱动的配置,敬请期待!!!