转载

Docker容器和存储系统系列(二)【精选期刊 . 3】

【编者的话】本文根据 云舒网络博客 整理发布。Docker容器采用两种不同的数据存储模式,一种是对Root Image采用分层文件系统的方式,一种是对应用数据采用了Volume接口。本文重点对Volume存储接口展开说明一下。

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

注:本期分享由江松原创,云舒网络整理发布。

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

一.为什么需要Volume

为什么我们需要Volume这样的数据接口?首先我们要深刻理解的是:Docker容器是承载应用的,是对应用环境的抽象而不是对OS运行环境的抽象。

Docker容器天生设计就是为了应用的运行环境打包、启动、迁移、弹性拓展,所以Docker容器一个最重要的特性就是disposable, 是可以被丢弃处理,稍瞬即逝的。而应用访问的重要数据可不是disposable的,这些重要数据需要持久化的存储保持。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的接口规范:

Docker容器和存储系统系列(二)【精选期刊 . 3】

可以看到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岁以下组别的决赛。里面一个题目是这样的:

Q :

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

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

A :

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.(迁移非常有挑战)

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

———————————————————————————————————————————

温馨提示:

云舒网络携手Rancher Labs推出【Rancher | 实战群】,在线为您分享Docker技术干货,更有往期回顾精选期刊等你拿!

本群汇集了Rancher中国最强技术精英团队及业内技术派高人,宗旨是为了大家拥有更专业的平台交流Rancher实战技术,实时与Rancher创始团队面对面!同时欢迎各位分享自己的经验、疑难问题,我们将定期邀请分享嘉宾做各类话题分享及回顾,共同实践研究Docker容器生态圈。

加群方法:

1.关注【云舒网络】公众号

2.留言”我要加群“

QQ群号:216521218

容器和VM最大的不同,正是在于容器不是VM。要想在生产环境中部署Docker,开发运维人员必须问自己关于数据存储的几个问题:Docker的数据存储组织形式是什么?Docker目前的存储生态圈各个公司的技术特点?Docker的出现对未来存储后端要求会带来哪些技术变革?阅读原文:关注公众号【云舒网络】,发送数字0102为了容易管理和提升运行效率,能不能精简OS层呢? 答案是可以!阅读原文:关注公众号【云舒网络】,发送数字02更多精彩内容,敬请关注云舒网络官网微信

原文  http://dockone.io/article/1154
正文到此结束
Loading...