Docker容器和存储系统系列(二)

 

作者背景:

江松,拥有超过16年的国内外企业级软件基础架构研发经验,对企业级存储,云计算都有很深的技术造诣和行业理解。

 

注:本期分享由江松原创,有容云整理发布,转载请注明出处。

 

前一期我们讲了Docker容器采用两种不同的数据存储模式,一种是对Root Image采用分层文件系统的方式,一种是对应用数据采用了Volume接口。这一期我就重点对Volume存储接口展开说明一下。

 

一. 为什么需要Volume这样的数据接口

 

首先为什么我们需要Volume这样的数据接口。我们要深刻理解的是Docker容器是承载应用的,是对应用环境的抽象而不是对OS运行环境的抽象。Docker容器天生设计就是为了应用的运行环境打包,启动,迁移,弹性拓展,所以Docker容器一个最重要的特性就是disposable, 是可以被丢弃处理,稍瞬即逝的。而应用访问的重要数据可不是disposable的,这些重要数据需要持久化的存储保持。Docker提出了Volume数据卷的概念就是来应对数据持久化的。如果把容器比喻成一个人,那么这个人的重要数据(物质上的)就是他的财产(钱)。容器可以不存在了,但是数据必须还要存在。小沈阳说,人生最大的痛苦就是人没了,钱还在。容器会说,正相反,Docker最大的幸福就是,我不在了,数据还在。

 

所以,定义好需要持久化的数据,采用Volume接口来存储访问是容器应用需要考虑的首要课题,必须引起高度的重视。我们可以想象一下容器和应用之间这样一段对话。

容器:我稍瞬即逝,我稍瞬即逝,重要的事情说三遍,我稍瞬即逝。

应用:哦,这样啊,那我的重要数据不能丢怎么办?

容器:请用Volume数据卷,请用Volume数据卷,重要的事情说三遍,请用Volume数据卷。

应用:&%#!,知道了,真啰嗦,你的前世一定是一台复读机,妈妈再也不用担心你的学习了。

 

二. Volume目录挂载

 

那么,既然容器的分层文件系统是为了容器稍瞬即逝,弹性迁移所设计的,Volume接口的实现就肯定和它很不一样了。具体从技术上来说,Volume接口绕过了disposable的分层文件系统,而是采用直接mount挂载的方式。Volume目录挂载后,对应用来说是透明的,应用不需要任何改变,应用按照原来的方式访问Volume目录就能实现重要数据的持久化。这有点像你在Win7下创建一个百度网盘目录一样,你向网盘目录拷贝文件的方式和向其他目录拷贝文件没有区别,但是如果你的笔记本丢了,其他目录的文件就丢了,但是网盘上的文件始终存在。这就是所谓的数据持久化。

 

三. 数据迁移

 

数据能够持久化以后,应用容器迁移和数据共享就成为了可能。Volume接口可以说很大程度上讲是容器迁移和数据共享的基础组件。我们先谈谈迁移。假设一个人需要从一个城市搬到另外一个城市,如果让他把所有的现金都打包带到身上是不太现实的,也非常不安全。怎么办呢?很简单,他去银行开个账户,把钱存进去,到另外一个城市的分行取就可以了。容器迁移的道理是一样的,因为数据都是存储在Volume卷(银行账户)里的,所以容器在集群的另外一个服务器甚至云端重新启动的时候,只要挂载同样的数据卷就可以了。当然,这些都需要数据卷后端有共享存储,或者数据副本的支撑。

 

容器应用迁移的核心其实是数据卷Volume迁移,(注:容器本身的迁移由镜像库Docker Registry主导) 这一部分涉及数据存储,安全加密,网络传输,性能优化,快照备份等等的技术点,是容器管理的核心功能。Volume数据卷更是容器间共享数据的基础,道理很简单,数据是存储在容器之外的,那么容器间共享同样一个数据卷就能共享数据。为此,Docker容器还专门推出了数据卷容器这种特殊的容器,只要一个数据卷容器来挂载Volume, 其他需要共享Volume的容器只需要很简单的指明和这个数据卷容器共享Volume就可以了。有兴趣的读者可以自己查找数据卷容器的资料。

 

为了更好的支持容器迁移和数据共享,Docker推出了Volume plugin接口机制,让第三方的存储厂商来支持Docker Volume并且在此基础上进行功能拓展。下面这个表提供了Volume plugin的接口规范:

 

 

可以看到Volume plugin的接口规范是相当简洁的。大部分的存储和高级功能由和Volume plugin driver驱动的后端存储提供。以下说明就是前一期提到的Volume plugin driver。我们下一期会重点介绍。

 

Rancher Convoy :  Convoy是Rancher Labs用go开发的支持DeviceMapper, NFS,EBS, Glusterfs多种后端存储的Docker Volume plugin driver. Convoy还提供了一个存储拓展功能(如快照,备份恢复等)的接口框架。

 

Flocker: Flocker volume plugin driver主要用于多主机环境Docker数据卷的迁移,从而支持数据库应用等stateful有状态应用的主机间迁移。

 

关于Volume今天我就介绍到这里。又到了总结的时间了,前两天做了个梦,梦见自己参加了“迎接一带一路,全国Docker知识大赛”18岁以下组别的决赛。里面一个题目是这样的:

 

请以Volume的字母为首字母,分别组成一个句子来说明Volume的特性。

 

好有挑战啊,不过有了前面对Volume概念的理解,我很快就写出了答案。

V -- Very important data.  (存储很重要的数据)

O -- Opt to be shared.(多用于容器数据共享。)

L -- Like a bank to store money.(像银行存储资金)

U -- User defined plugin driver.(用户定义的插件驱动)

M -- Move around is not easy.(迁移非常有挑战)

E -- Essential to clustered environment.(集群多主机应用的关键)

 

我梦见了我拿到了第一名,受到了Docker创始人Solomon Hykes的亲切接见。。。继续做梦吧,不要醒来。

 

 

本文电子书下载:

云盘下载:http://pan.baidu.com/s/1jHfP9Dc

网页下载:http://www.youruncloud.com/help/115.html

博客期刊:http://www.youruncloud.com/blog/0_3.html

 

 

分享:Docker容器和存储系统系列(二)

有容云-构筑企业容器云 www.youruncloud.com

温馨提示

对Docker容器技术或容器生产实施感兴趣的朋友欢迎加群讨论。我们汇集了Docker容器技术落地实施团队精英及业内技术派高人,在线为您分享Docker技术干货。我们的宗旨是为了大家拥有更专业的平台交流Docker实战技术,我们将定期邀请嘉宾做各类话题分享及回顾,共同实践研究Docker容器生态圈。

加微信群方法:

1.关注【有容云】公众号

2.留言”我要加群”

QQ群号:454565480

有容云微信二维码

文章归档

查看更多