本文讲的是<b>持续交付系列(二):使用Docker、Mesos实现持续交付</b>,【编者的话】本文主要介绍Mesos和Marathon的搭建以及如何完成整个持续交付过程,以及后续还可以做哪些改进和加强。整个系统搭建完成后,应用代码的改变会自动触发Jenkins构建流程,几秒钟后,改变就会通过Jenkins、Docker Hub和Marathon传递到Mesos中部署上线,是不是很酷?
本文是第二部分,将继续介绍Mesos和Marathon的搭建以及如何完成整个持续交付过程。

现在,我们有了功能性开发和持续集成的环境,可以开始搭建Mesos集群了。
如下是包含系统所有部分的<code>fig.yml</code>文件。在之前配置好的Jenkins和Docker Registry基础之上,我们还有Mesos master、Mesos slave、Mesosphere Marathon和负责内部Mesos通信的Zookeeper。
<code>fig.yml</code>不多做解释。所有环境参数都是参考Docker Hub上对应镜像的使用介绍。
Mesos slave容器还使用了挂载socket的技巧,不过不需要做别的,因为slave是用root用户运行的,有访问socket的权限。
要注意Jenkins容器连接到了Marathon。这就要求能够从Jenkins容器发送请求到Marathon容器里。我们在下一章介绍部署的时候会详细说明。
现在重启系统,可以看到系统开始运行:
容器启动非常快,但是要等所有服务都上线大概花了30秒(在MacBook Air上的Ubuntu虚拟机里)。
Mesos在<code>http://localhost:5050</code>。如下截图里可以看到一个活动的slave。该slave在本次配置下没有暴露任何端口。
从<code>http://localhost:8080</code>可以访问Marathon。
最后一步是将我们用Marathon在Mesos上新构建的Docker镜像部署好。
首先需要创建配置文件将应用安排到Marathon上,如下<code>app_marathon.json</code>:
这里也有一些需要注意的地方。比如,没有提到健康检查,需要告诉Marathon应用运行和不运行的时间。
一旦我们发布了这个JSON文件,就可以在<code>deploy.sh</code>里添加最新的脚本,移除最近运行的应用,并且用新的镜像重新部署它。当然有更好的升级策略,不过不在这里讨论。
最后一步是将<code>deploy.sh</code>添加到Jenkins的配置中并运行构建。
成功构建之后,可以看到应用运行在Marathon上:
从<code>http://localhost:31000</code>可以访问我们自己的应用:
现在可以试着改变应用并且触发Jenkins去构建build。几秒钟后,这个改变就会通过Jenkins、Docker Hub和Marathon传递到Mesos里!
要想改进这个系统有两个大方向:添加更多的功能以及提升搭建质量(deepening the quality of the setup)。可能的扩展有很多,我们只列了几个例子:
将HelloWorld示例扩展为一个标准Web应用
多语言支持
多层次的自动化测试(单元测试、系统测试、性能测试等等。)
用Git hook自动触发Jenkins build
部署到公有云里,比如GCE、AWS等
在多主机上运行
HAProxy搭建
用Jmeter实现负载模拟下的自动扩展
部署一个基于微服务的系统
使用Flocker做持久化存储
使用Weave作为网络容器
使用Consul实现自动服务发现
添加系统监控
添加集中式日志
我的下一步想使系统可以面向外部用户,添加HAProxy和自动扩展的能力,如下图所示:
一开始搭建这个系统主要是想帮助开发和运维人员学习如何在持续交付领域使用Docker和Mesos。在几个月的过程中我发现完整的系统很复杂,很难解释,更难搭建和使用。
===========================
译者介绍
崔婧雯,现就职于VMware,高级软件工程师,负责桌面虚拟化产品的质量保证工作。曾在IBM WebSphere业务流程管理软件担任多年系统测试工作。对虚拟化,中间件技术有浓厚的兴趣。
原文发布时间为:2015-03-11
本文作者:崔婧雯
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:持续交付系列(二):使用Docker、Mesos实现持续交付