Docker存储驱动之总览
简介
本文会介绍Docker存储驱动的特性,别列出现在已经支持的存储驱动,最后,会介绍如果选型适合你的存储驱动。
可插拔的存储驱动架构
Docker的存储驱动架构是可插拔的,可以让你很方便的将适合你环境和用例的存储驱动“插进”Docker。每个Docker存储驱动都建立在一种Linux文件系统或者卷管理系统之上,也可以很自由地按照其自己的方法去实现镜像层和容器层的管理。也就是说一些存储驱动在不同的场景下会比其他的驱动性能更好。
一旦你决定了哪种驱动最合适,你就可以Docker daemon启动之前设置驱动到Docker中,这样你就可以在该存储驱动上运行Docker daemon了,所有新容器都会使用这个驱动来创建了。下图显示了支持的驱动技术和它们对应的Docker存储驱动名称。
| Technology | Storage driver name |
|---|---|
| OverlayFS | overlay / overlay2 |
| AUFS | aufs |
| Btrfs | btrfs |
| Device Mapper | devicemapper |
| VFS | vfs |
| ZFS | zfs |
可以通过docker info命令来查看当前daemon使用着哪种存储驱动。
$ docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 1
Server Version: 1.12.6
Storage Driver: overlay2
Backing Filesystem: extfs
... output truncated ...
上面的输出表示,Docker daemon使用overlay2作为存储驱动,而其Backing Filesystem是extfs。也就是说,在我的环境中,overlay2存储驱动是在ext文件系统上操作的。后端文件系统指的是创建了Docker host的本地存储区域/var/lib/docker的文件系统。
存储驱动,可以运行在某种后端文件系统上,但也有些不支持的后端文件系统,它们之间的对应关系如下表:
| Storage driver | 后端文件系统 | 不支持的后端文件系统 |
|---|---|---|
| overlay | ext4 xfs | btrfs aufs overlay zfs eCryptfs |
| overlay2 | ext4 xfs | btrfs aufs overlay 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 |
想要设置存储驱动,可以在dockerd启动的时候加入--storage-driver=的参数,也可以设置DOCKER_OPTS选项到/etc/default/docker文件中。下面的命令显示了如何在dockerd命令中使用devicemapper存储驱动。
$ 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
<output truncated>
存储驱动的选择会影响你容器应用的性能,所以很有必要理解存储驱动之间的区别和优缺点,然后才能选择合适的驱动。
共享存储系统和存储驱动
很多企业都从共享文件系统(如SAN和NAS)中获取存储资源。通常情况下,这都能带来更好的性能和更高可用性,还有如超配、副本删除、压缩等高级特性。
Docker存储驱动和数据卷都可以运行在这些共享存储系统提供的存储上,这使得Docker可以利用这些系统提供的优越性能和可用性。
使用哪种存储驱动呢?
很多方面都会影响存储驱动的选择,不过有两点必须记住:
▶没有哪种驱动适合所有的用户场景;
▶存储驱动一直都在提升和改进;
此外,下面的内容,也可以提供一些指导意见。
稳定性
为了Docker环境更加稳定,你应该考虑一下一些建议:
▶使用你OS发行版默认的存储驱动。安装Docker时,它会根据你的系统选择默认的存储驱动,稳定性是它选择的一个主要方面。
▶遵守CS Engine compatibility matrix指定的配置。CS Engine是Docker Engine的商业化版本,它代码基于开源的Engine。不过它有一套限制的支持配置,而这个支持的配置使用最稳定成熟的存储驱动。
经验和专业技能
选择你和你的团队都有经验的一种存储。比如,你使用RHEL系列的OS,你可能对LVM和Device Mapper很有经验,因此,你应该使用devicemapper存储驱动。
如果你对Docker提供的存储驱动都没有经验,并且你希望使用简单可用的稳定的Docker环境,那么你可以考虑使用你发行版默认的Docker存储驱动。
未来
很多人认为OverlayFS是Docker存储驱动的未来。然而,它还不够成熟,并且和aufs、devicemapper相比暂时还不够稳定。因此,使用OverlayFS时应该注意。
下图列出了所有驱动,并列出了它们的优缺点。如果要选择存储驱动,那么可以参考下面提到的内容。

Overlay vs Overlay2
OverlayFS有两种存储驱动,它们使用了相同的OverlayFS技术,但却有着不同的实现,在磁盘使用上也并不互相兼容。因为不兼容,两者之间的切换必须重新创建所有的镜像。overlay驱动是最原始的OverlayFS实现,并且,在Docker1.11之前是仅有的OverlayFS驱动选择。overlay驱动在inode消耗方面有着较明显的限制,并且会损耗一定的性能。overlay2驱动解决了这种限制,不过只能在Linux kernel 4.0以上使用它。
Docker存储驱动之总览的更多相关文章
- Docker存储驱动之OverlayFS简介
简介 OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性: 1) 更简单地设计: 2) 从3.18开始,就进入了Linux内核主线: 3) 可能更快一些. ...
- Docker存储驱动之Device Mapper简介
Device Mapper是一个基于kernel的框架,它增强了很多Linux上的高级卷管理技术.Docker的devicemapper驱动在镜像和容器管理上,利用了该框架的超配和快照功能.为了区别, ...
- Docker存储驱动Device Mapper,Overlay,AUFS
Docker存储驱动之Device Mapper简介 - BookShu - 博客园https://www.cnblogs.com/styshoo/p/6528762.html Docker存储驱动之 ...
- 聊一聊docker存储驱动
目录 镜像的分层特性 容器读写层的工作原理 写时复制 用时配置 Docker存储驱动 AUFS OverlayFS Devicemapper 常用存储驱动对比 AUFS VS OverlayFS Ov ...
- 有容云-【原理】Docker存储驱动之AUFS
编者按:今天聊一聊Docker的Image(镜像)与Container(容器)的存储以及存储驱动之AUFS. Docker存储驱动简介 Docker内置多种存储驱动,每种存储驱动都是基于Linux ...
- DOCKER学习_006:Docker存储驱动
一 镜像的分层特性 在说docker的文件系统之前,我们需要先想清楚一个问题.我们知道docker的启动是依赖于image,docker在启动之前,需要先拉取image,然后启动.多个容器可以使用同一 ...
- docker 存储驱动(storage driver)知识总结
http://www.sohu.com/a/101016494_116235 一,先看docker镜像是如何构建和存储. 下面是ubuntu:15.04的镜像分层.一共是4层,每一层都由一些只读并且描 ...
- Docker存储驱动之AUFS简介
简介 AUFS是曾是Docker默认的首选存储驱动.它非常稳定.有很多真实场景的部署.很强的社区支持.它有以下主要优点: 极短的容器启动时间. 有效的存储利用率. 有效的内存利用率. 虽然如此,但由于 ...
- Docker存储驱动之Btrfs简介
简介 Btrfs是下一代的copy-on-write文件系统,它支持很多高级特性,使其更加适合Docker.Btrfs合并在内核主线中,并且它的on-disk-format也逐渐稳定了.不过,它的很多 ...
随机推荐
- Prolog 外部不能有 DOCTYPE 声明。处理资源 'http://192.168.115.152:8082/api/EmpApi.aspx' 时出错。第 3 行,位置: 11
在Default.aspx代码中删除以下代码(其他窗口也是这样删除): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ...
- Swing JComboBox的使用
1:JComboBox的使用:类层次结构图: java.lang.Object --java.awt.Component --java.awt.Container --javax.swing.JCom ...
- StringUtils工具类常用方法介绍(持续更新)
StringUtils方法的操作对象是java.lang.String类型的对象,是JDK提供的String类型操作方法的补充,并且是null安全的(即如果输入参数String为null则不会抛出Nu ...
- 详解Google Chrome浏览器(操作篇)(一)
开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...
- 用VUEJS做一个网易云音乐
前言:自己学习VUEJS也一段时间,但一直没有做出来一东西.我自己一直喜欢用网易云音乐app,于是乎就做了这个app. 项目截图 技术栈 vue全家桶 (vue vue-router vuex) ax ...
- C语言对齐
"%-md":左对齐,若m比实际少时,按实际输出.(m为整数) "%md":右对齐,若m比实际少时,按实际输出. 我自己编了一个,给你看看实际效果: #incl ...
- 包装一个php的验证码类
验证码是我们开发的时候经验到的功能,所以在此本人包装了一个验证码类,应该可以作为php的类插件用,在此分享给各位博客园的读友. 实现的原理也是很简单,就是利用画布的几个元素,再加上一些字符串的获取,东 ...
- 粗谈shell脚本风格
注意:此风格并非官方版本,为个人在编写和维护脚本程序时总结出来的民间版本.0. 开头:除去开头的#!/bin/bash,最前面的就是脚本描述注释了,视个人喜好而定,例如: ############## ...
- IBatis入门
iBatis 简介: iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快.如果不需要太多复杂的功能,iBatis 是能够满足 ...
- jvm系列(八):jvm知识点总览-高级Java工程师面试必备
在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...