title: Docker之几种storage driver比较
date: 2015-11-27 18:16:22
tags: docker
categories: Docker Others
本文介绍Docker
使用的几种storage driver。目前Docker
支持如下几种storage driver:
目录:
* storage driver的选择
* aufs
* aufs中文件的读写
* aufs这中文件的删除
* Docker中使用aufs
* device mapper
* device mapper中镜像的分层和共享
* device mapper中的读操作
* device mapper中的写操作
* device mapper在Docker中的性能表现
* overlayfs
* overlayfs中镜像的分层和共享
* overlayfs中镜像和容器的结构
* overlayfs中容器的读写操作
* 在Docker中使用overlayfs
* overlayfs在Docker中的性能表现
Storage Driver的选择
可以使用docker info
命令查看你的Docker
使用的storage driver
,我的机器上的信息如下:
Storage Driver: aufs
...
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
...
可以看到的我本机上使用的storage driver
是aufs
。此外,还有一个Backing Filesystem
它只你本机的文件系统,我的是extfs
,aufs
是在extfs
之上创建的。你能够使用的storage driver
是与你主机上的Backing Filesystem
有关的。比如,btrfs
只能在backing filesystem为btrfs上的主机上使用。storage driver
与Backing Filesystem
的匹配关系如下表所示(表来自Docker官网Docker docs):
|Storage driver |Must match backing filesystem |
|---------------|------------------------------|
|overlay |No |
|aufs |No |
|btrfs |Yes |
|devicemapper |No |
|vfs* |No |
|zfs |Yes |
你可以通过在docker daemon
命令中添加--storage-driver=<name>
标识来指定要使用的storage driver
,或者在/etc/default/docker
文件中通过DOCKER_OPTS
指定。
选择的storage driver
对容器中的应用是有影响的,那具体选择哪种storage driver
呢?答案是“It depends”,有如下几条原则可供参考:
- 选择你及你的团队最熟悉的;
- 如果你的设施由别人提供技术支持,那么选择它们擅长的;
- 选择有比较完备的社区支持的。
AUFS
AUFS
是Docker
最先使用的storage driver
,它技术很成熟,社区支持也很好,它的特性使得它成为storage driver
的一个好选择,使用它作为storage driver
,Docker
会:
- 容器启动速度很快
- 存储空间利用很高效
- 内存的利用很高效
尽管如此,仍有一些Linux发行版不支持AUFS
,主要是它没有被并入Linux内核。
下面对AUFS
的特性做介绍:
AUFS
是一种联合文件系统,意思是它将同一个主机下的不同目录堆叠起来(类似于栈)成为一个整体,对外提供统一的视图。AUFS
是用联合挂载来做到这一点。
AUFS
使用单一挂载点将多个目录挂载到一起,组成一个栈,对外提供统一的视图,栈中的每个目录作为一个分支。栈中的每个目录包括联合挂载点都必须在同一个主机上。
在Docker
中,AUFS
实现了镜像的分层。AUFS中的分支对应镜像中的层。
此外,容器启动时创建的读写层也作为AUFS的一个分支挂载在联合挂载点上。
aufs中文件的读写
AUFS
通过写时复制策略来实现镜像镜像的共享和最小化磁盘开销。AUFS
工作在文件的层次上,也就是说AUFS对文件的操作需要将整个文件复制到读写层内,哪怕只是文件的一小部分被改变,也需要复制整个文件。这在一定成度上会