Docker存储(一):存储驱动程序的选择

选择存储驱动程序

本节描述了 Docker 的存储驱动程序特性。它列出了 Docker 支持的存储驱动程序以及与管理它们相关联的基本命令。最后,本页提供了选择存储驱动程序的指南。

本节的内容是为已经了解存储驱动程序技术的读者准备的。

可插拔存储驱动架构

Docker有一个可插拔存储驱动架构。这就可以根据自己实际的环境和用例来选择最适合的存储驱动。每个Docker存储驱动程序都基于一个Linux文件系统或卷管理器。

此外,每个存储驱动程序都可以*地以自己独特的方式实现对镜像层和容器层的管理。这意味着在不同的环境下,某些存储驱动程序的性能要优于其他存储驱动程序。

一旦确定了哪个驱动程序是最好的,就可以在启动时在Docker daemon上设置这个驱动程序。因此,Docker守护进程只能运行一个存储驱动程序,并且由该守护进程实例创建的所有容器都使用同一个存储驱动程序。

下表显示了所支持的存储驱动程序技术及其驱动程序名称:

Technology Storage driver name
OverlayFS overlay or overlay2
AUFS aufs
Btrfs btrfs
Device Mapper devicemapper
VFS vfs
ZFS zfs

要知道守护进程上设置了哪个存储驱动程序,可以使用docker info命令:

$ docker info

Containers: 0
Images: 0
Storage Driver: overlay
 Backing Filesystem: extfs
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.19.0-15-generic
Operating System: Ubuntu 15.04
... output truncated ...

说明:

(1)Docker daemon使用overlay作为存储驱动,而其Backing Filesystem是extfs。

(2)extfs意味着 overlay 存储驱动是在现有的(ext)文件系统上操作。

(3)后端文件系统指的是创建了Docker host的本地存储区域/var/lib/docker的文件系统。

存储驱动,可以运行在某种后端文件系统上,但也有些不支持的后端文件系统,它们之间的对应关系如下表:

Storage driver 后端文件系统 不支持的后端文件系统
overlay ext4 xfs btrfs aufs overlay overlay2 zfs eCryptfs
overlay2 ext4 xfs btrfs aufs overlay overlay2 zfs eCryptfs
aufs ext4 xfs btrfs aufs eCryptfs
btrfs btrfs only N/A
devicemapper direct-lvm N/A
vfs debugging only N/A
zfs zfs only N/A

设置存储驱动方式有两种:

(1)可以在dockerd启动的时候加入--storage-driver=<name>如:

```python

 $ dockerd --storage-driver=devicemapper &

 $ docker info
 Containers: 0
 Images: 0
 Storage Driver: devicemapper
  Pool Name: docker-252:0-147544-pool
  Pool Blocksize: 65.54 kB
  Backing Filesystem: extfs
  Data file: /dev/loop0
  Metadata file: /dev/loop1
  Data Space Used: 1.821 GB
  Data Space Total: 107.4 GB
  Data Space Available: 3.174 GB
  Metadata Space Used: 1.479 MB
  Metadata Space Total: 2.147 GB
  Metadata Space Available: 2.146 GB
  Thin Pool Minimum Free Space: 10.74 GB
  Udev Sync Supported: true
  Deferred Removal Enabled: false
  Data loop file: /var/lib/docker/devicemapper/devicemapper/data
  Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
  Library Version: 1.02.90 (2014-09-01)
  Execution Driver: native-0.2
  Logging Driver: json-file
  Kernel Version: 3.19.0-15-generic
  Operating System: Ubuntu 15.04
  <output truncated>
```

(2)更改配置文件

```python
#添加 daemon.json 文件
echo "{

 "storage-driver": "overlay2",

 "storage-opts": [ "overlay2.override_kernel_check=true" ],

 "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"],

 "live-restore" : false

}" >> /etc/docker/daemon.json
```

说明:存储驱动的选择会影响你容器应用的性能,所以很有必要理解存储驱动之间的区别和优缺点,然后才能选择合适的驱动。

共享存储系统和存储驱动

很多企业都从共享文件系统(如SAN和NAS)中获取存储资源。通常情况下,这都能带来更好的性能和更高可用性,还有如超配、副本删除、压缩等高级特性。

Docker存储驱动和数据卷都可以运行在这些共享存储系统提供的存储上,这使得Docker可以利用这些系统提供的优越性能和可用性。然而,Docker并没有与这些底层系统集成。

使用哪种存储驱动呢?

有几个因素会影响存储驱动程序的选择。但是,必须记住这两个事实:

(1)没有哪种驱动适合所有的用户场景;

(2)存储驱动一直都在提升和改进;

此外,下面的内容,也可以提供一些指导意见。

稳定性

要获得最稳定、最轻松的Docker体验,应该考虑以下几点:

(1)使用您的发行版的默认存储驱动程序。当Docker安装时,它会根据系统的配置选择一个默认的存储驱动程序。稳定性是影响默认使用哪种存储驱动程序的重要因素。偏离此默认值可能会增加遇到bug和细微差别的几率。

(2)遵守CS Engine compatibility matrix指定的配置。CS Engine是Docker Engine的商业化版本,它代码基于开源的Engine。不过它有一套限制的支持配置,而这个支持的配置使用最稳定成熟的存储驱动。

经验和专业技能

(1)选择你和你的团队都有经验的一种存储。比如,你使用RHEL系列的OS,你可能对LVM和Device Mapper很有经验,因此,你应该使用devicemapper存储驱动。

(2)如果你对Docker提供的存储驱动都没有经验,并且你希望使用简单可用的稳定的Docker环境,那么你可以考虑使用你发行版默认的Docker存储驱动。

面向未来

很多人认为OverlayFS是Docker存储驱动的未来。然而,它还不够成熟,并且和aufs、devicemapper相比暂时还不够稳定。因此,使用OverlayFS时应该注意。

下图列出了所有驱动,并列出了它们的优缺点。如果要选择存储驱动,那么可以参考下面提到的内容。

Docker存储(一):存储驱动程序的选择

Overlay vs Overlay2

OverlayFS有两种存储驱动,它们使用了相同的OverlayFS技术,但却有着不同的实现,在磁盘使用上也并不互相兼容。因为不兼容,两者之间的切换必须重新创建所有的镜像。overlay驱动是最原始的OverlayFS实现,并且,在Docker1.11之前是仅有的OverlayFS驱动选择。overlay驱动在inode消耗方面有着较明显的限制,并且会损耗一定的性能。overlay2驱动解决了这种限制,不过只能在Linux kernel 4.0以上使用它。

所以,对于使用Linux kernel 4.0之前的建议使用 overlay,之后的建议使用 overlay2。

上一篇:什么是OSI的第7层


下一篇:docker 内存满了服务异常退出,强制重启造成服务无法运行