Bootstrap

Docker 存储启动程序选择

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)

overlay¹, devicemapper², zfsvfs

Debian

  1. overlay2 (Debian Stretch)
  2. aufs or devicemapper(早期版本)

overlay, vfs

CentOS

overlay2

overlay¹, devicemapper², zfsvfs

Fedora

overlay2

overlay¹, devicemapper², zfsvfs

 

注意: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

xfs (with ftype=1)ext4

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 共享存储系统

如果企业使用SANNAS、硬件RAID或其他共享存储系统,它们可能提供高可用性、提高性能、精简配置、重复数据删除和压缩。在许多情况下,Docker可以在这些存储系统上工作,但docker 无法紧密集成它们。

每个Docker存储驱动程序都基于Linux文件系统或卷管理器。在共享存储系统上操作存储驱动程序(文件系统或卷管理器)时,请确保遵循现有的最佳实践。例如,如果在共享存储系统上使用ZFS存储驱动程序,请确保遵循在特定共享存储系统上操作ZFS文件系统的最佳实践

4.3 稳定性

对于一些用户来说,稳定性比性能更重要。虽然Docker认为这里提到的存储驱动程序都是稳定的,但是有些是更新的,并且仍在积极开发中。通常,overlay2aufsoverlaydevicemapper是稳定性最高的选择。

4.4 本地测试

您可以在不同的存储驱动程序上运行自己的程序测试Docker的性能。确保使用等效的硬件和工作负载来匹配生产条件,这样您就可以看到哪个存储驱动程序提供了最佳的总体性能。

五,检差当前docker存储驱动

使用语句 docker info  / docker system info

具体每种驱动的配置,敬请期待!!!

;