你的位置:首页 > 云计算大数据

Docker之Volume应用数据接口

2年前 (2017-06-29) 浏览:(478) 云计算大数据 评论(0)

 一.为什么需要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的接口规范:



可以看到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.(迁移非常有挑战)
E -- Essential to clustered environment.(集群多主机应用的关键)

尊重共享,欢迎转载,请自觉添加本文链接,谢谢!本文链接:https://www.601849.com/post/271.html