当 Docker 1.12 Swarm Mode 与持久化存储遇到 EMC REX-Ray

DaoCloud 于今年 7 月宣布与 EMC 公司的合作取得里程碑式进展,DaoCloud Enterprise 应用云平台产品成功整合包括 REX-Ray 、ScaleIO、RackHD 等多项 EMC 企业级产品。本文将为读者剖析 EMC 的 REX-Ray 与 Docker 1.12 版本下的 Docker Swarm Mode 是如何开展工作的。

“Docker Engine 1.12 版有没有类似于服务发现和编排的存储发现功能呢?”

 “ 1.12 版的 Swarm Mode 在卷/持久化存储上有哪些革新?”

 “对于我的数据库持久化,哪个才是最优化的解决方案?”

—— 凡此种种,都是 Docker 用户几乎都会被问到的问题。Docker 1.12 版完全集中在编排功能上,但是在卷、卷驱动和存储方面也有不少改进。

20161019203156

因此,在这篇文章里,我将会回答以下这些问题:

1、Docker 1.12 的持久化存储有什么新的亮点?

2、在新的 API 服务中,持久化存储是如何工作的?

3、如何用 RexRay 为 Docker 1.12 部署一个简单的网络应用?

Docker 存储中,持久化存储指的是存储卷——通常与有状态的应用有关,例如数据库,也可以说是用来存储那些在容器生命周期之外的数据。像数据库这样的服务需要置于容器之外的持久化存储,而且持久化存储要比容器的生命周期更长。

Docker 用 Volume 存储卷的形式为容器提供基本的持久化数据存储方案。有相当多的人关注 OverlayFS,它是一款现代的联合文件系统,跟 AUFS 很类似,但它有更简洁明晰的设计风格和极具潜力的速度,而且从 3.18 版本开始就一直在主线 Linux 内核上工作了。在 Docker 社区,OverlayFS 的人气急剧攀升,被很多人看成是 AUFS 的接班人。但是需要承认的是,持久化存储仍然是 Docker 发展的热门领域,在 Docker 1.12.1 中,已经做出了不少改进。

我们还得接受另一个事实——那些在产品中不遗余力使用 Docker 的拥趸们,还希望使用比如 EMC(REX-Ray)、ClusterHQ(Flocker)、PortWrox、CoreOS 和 Nutanix 这些强大的合作伙伴生态来想方设法简化持久化存储。EMC REX-Ray 是最普及的持久化存储解决方案,有着广大的 Docker 用户基础。现在让我们看看 REX-Ray 与 Docker 1.12 的 Docker Swarm Mode 是如何工作的。

20161019203203

▼什么是 REX-Ray?

REX-Ray 是一个开源的存储编排引擎,可为 Docker 容器运行时提供持久化存储访问,并为普通存储、虚拟化和云平台提供高级存储功能的友好的用户界面。它在后端实现了一套 Docker 存储卷驱动,为容器提供持久化存储,对很多存储供应商提供支持。实际上,它就是一个用于管理多平台存储的分布式工具。REX-Ray 为各种存储平台提供了一套通用的创建、移除、映射以及复制存储卷的 API。

REX-Ray 在 0.4.0 版本之前是一个独立进程,而从 0.4.0 版开始,它以 Client-Server 的分布式模式工作。Client 端是本地主机进程的一种抽象层次(对存储卷附件、发现、格式化,以及挂载设备的请求),而 Server 端则提供对多个存储平台的控制面板的必要抽象。

▼安装 REX-Ray?

是的,你当然可以。请在容器内部运行 REX-Ray。

官方安装 REX-Ray 非常简单。REX-Ray 是用 Go 语言写成的,所以一般情况下除了单个二进制文件,不需要安装任何依赖文件。借助 curl 工具,手动安装 REX-Ray 也就是简单的一行命令:

curl -sSL https://dl.bintray.com/emccode/

rexray/install| sh

除了官方推荐的安装方法之外,您将 REX-Ray 运行在容器中,通过 docker service  命令的 -mode=global 选项创建,这样整个集群内的所有节点都会自动安装 REX-Ray 工具。这就是 Docker 1.12 版的魔法!可以参考文末的阅读原文链接查看详细信息。

REX-Ray 0.5.1 是最新的发布版本,安装它仅需要很短的时间就能完成。REX-Ray CLI 功能丰富,有各种各样可用的选项来玩转存储卷管理功能,并且 REX-Ray 有一个超级赞的功能,就是它可以被作为一个交互 CLI 来执行存储卷的管理功能,此外,它还可以被作为一个服务来支持 Docker 和其他能通过 HTTP/JSON 完成通信的平台。

▼在 Docker 新的 Service API 中,持久化存储是如何工作的呢?

Docker 1.12 带来了 3 个新的 API ——service(服务)、swarm 和 node(节点)。之前版本种的 -v 选项在 Docker 1.12 的 Swarm Mode 中被舍弃了。原因是——首先声明,在这里我们讨论的是跨越上百个集群节点的编排功能,而不是一台运行 Docker 容器的单个主机—— “-v” 被舍弃是因为服务并不编排卷。

有一点非常重要:在 Docker 1.12.1 中我们专门使用术语 “mount”(挂载),因为这才是服务做的事情。你当然可以用一个带有模板的服务来创建一个卷,然后再添加给你,但它本身并不处理卷,所以现在 Docker 有意把它去掉了。

▼在 Docker 1.12 中,如何使用 REX-Ray来部署一个简单的网页应用?

假设你已经安装了 REX-Ray,接下来可以试试 Swarm Mode 是怎样处理持久化存储功能的。

步骤大致是这样的,首先,通过 REX-Ray 创建一个供 Docker 容器使用的 REX-Ray 存储卷,并挂载此存储卷以便 Docker 访问;

然后,启动 REX-Ray service,就可以使用 Docker 命令查看到刚刚创建好的存储卷。

接下来,就可以运行一个关联这个存储卷的应用。比如我们可以创建一个 WordPress 应用服务,把 MySQL 数据库挂载到 REX-Ray 卷上,以便把数据库变成一个持久化存储应用。

分享到:更多 ()