持续交付系列(二):使用Docker、Mesos实现持续交付
Docker 实现 系列 持续 交付 Mesos 使用
2023-09-27 14:27:26 时间
本文讲的是持续交付系列(二):使用Docker、Mesos实现持续交付,【编者的话】本文主要介绍Mesos和Marathon的搭建以及如何完成整个持续交付过程,以及后续还可以做哪些改进和加强。整个系统搭建完成后,应用代码的改变会自动触发Jenkins构建流程,几秒钟后,改变就会通过Jenkins、Docker Hub和Marathon传递到Mesos中部署上线,是不是很酷?
第一部分(中文翻译)我们介绍了如何Docker化一个Node.js应用,如何使用Fig部署Jenkins和Docker Registry,以及如何实现Node.js应用的持续集成。
本文是第二部分,将继续介绍Mesos和Marathon的搭建以及如何完成整个持续交付过程。
云
如果你不了解Mesos或者Marathon,可以参考如下文章:文章1、文章2和文章3。
现在,我们有了功能性开发和持续集成的环境,可以开始搭建Mesos集群了。
如下是包含系统所有部分的fig.yml文件。在之前配置好的Jenkins和Docker Registry基础之上,我们还有Mesos master、Mesos slave、Mesosphere Marathon和负责内部Mesos通信的Zookeeper。
fig.yml不多做解释。所有环境参数都是参考Docker Hub上对应镜像的使用介绍。
Mesos slave容器还使用了挂载socket的技巧,不过不需要做别的,因为slave是用root用户运行的,有访问socket的权限。
要注意Jenkins容器连接到了Marathon。这就要求能够从Jenkins容器发送请求到Marathon容器里。我们在下一章介绍部署的时候会详细说明。
现在重启系统,可以看到系统开始运行:
容器启动非常快,但是要等所有服务都上线大概花了30秒(在MacBook Air上的Ubuntu虚拟机里)。
Mesos在http://localhost:5050。如下截图里可以看到一个活动的slave。该slave在本次配置下没有暴露任何端口。
从http://localhost:8080可以访问Marathon。
部署 最后一步是将我们用Marathon在Mesos上新构建的Docker镜像部署好。
首先需要创建配置文件将应用安排到Marathon上,如下app_marathon.json:
这里也有一些需要注意的地方。比如,没有提到健康检查,需要告诉Marathon应用运行和不运行的时间。
一旦我们发布了这个JSON文件,就可以在deploy.sh里添加最新的脚本,移除最近运行的应用,并且用新的镜像重新部署它。当然有更好的升级策略,不过不在这里讨论。
最后一步是将deploy.sh添加到Jenkins的配置中并运行构建。
成功构建之后,可以看到应用运行在Marathon上:
从http://localhost:31000可以访问我们自己的应用:
现在可以试着改变应用并且触发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。在几个月的过程中我发现完整的系统很复杂,很难解释,更难搭建和使用。
我们请Marta marszal创建了本文的图表,以让文章更容易理解。
如果有改进本示例系统的建议,请一定告诉我们。本文的图表也可以随意下载和使用,不过请注明出处。CD_with_Mesos_Docker
所有资源都可以在GitHub上找到。
===========================
译者介绍
崔婧雯,现就职于VMware,高级软件工程师,负责桌面虚拟化产品的质量保证工作。曾在IBM WebSphere业务流程管理软件担任多年系统测试工作。对虚拟化,中间件技术有浓厚的兴趣。
原文链接:Continuous Delivery with Docker on Mesos in less than a minute – Part 2(翻译:崔婧雯 校对:李颖杰)
原文发布时间为:2015-03-11 本文作者:崔婧雯 本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。 原文标题:持续交付系列(二):使用Docker、Mesos实现持续交付
分享Docker监控体系(Kubernetes Mesos监控) 常不释放资源,造成高CPU占用;比如进程结束异常,不停的重启相同的进程;比如日志级别设置过低,大量日志输出,影响进程性能和占用大量磁盘空间。所以做监控时一定要遵循有自我安全控制的能力。监控工具在拿到生产环境中运行前,一定要先在测试环境中进行一段时间的试运行 。
基于Docker搭建多节点Mesos/Marathon 本文讲的是基于Docker搭建多节点Mesos/Marathon【编者的话】在之前的一篇博客中,我介绍了基于Docker搭建单机版Mesos/Marathon,但是仅仅使用了单个节点。而在这篇博客中,我将介绍基于Docker搭建多节点Mesos/Marathon,开发者可以使用3个节点快速地搭建一个真正的分布式容器集群系统。
去哪儿网利用Mesos和Docker构建dev—beta环境 本文讲的是去哪儿网利用Mesos和Docker构建dev—beta环境【编者的话】本文是@Container容器技术大会·北京站上去哪网带来的分享——去哪儿网利用Mesos和Docker构建dev—beta环境。
容器存储架构比较:Kubernetes、Docker和Mesos Compare 本文讲的是容器存储架构比较:Kubernetes、Docker和Mesos Compare【编者的话】 容器存储是容器离不开的一个话题,对于无状态的Docker容器,容器重启时容器数据会自动清除,一些静态的数据我们可以通过配置文件或者在容器build时直接写死。
去哪儿网基于Mesos和Docker构建私有云服务的实践 本文讲的是去哪儿网基于Mesos和Docker构建私有云服务的实践【编者的话】本文深入介绍了去哪儿网利用Mesos和Docker构建私有云服务的全过程,分享了从无状态应用向有状态应用逐步过度的经验与心得。
Docker、Kubernetes、Apache Mesos 之争 | 一个与传说不同的故事 本文讲的是Docker、Kubernetes、Apache Mesos 之争 | 一个与传说不同的故事【编者的话】有无数的文章、讨论和社交网络上的交流在比较 Docker、Kubernetes 和 Mesos。
第一部分(中文翻译)我们介绍了如何Docker化一个Node.js应用,如何使用Fig部署Jenkins和Docker Registry,以及如何实现Node.js应用的持续集成。
本文是第二部分,将继续介绍Mesos和Marathon的搭建以及如何完成整个持续交付过程。
云
![15.02_.11_diagram3_.jpg 15.02_.11_diagram3_.jpg](http://dockerone.com/uploads/article/20150311/38130eb04246dd5f1a2e02145c1440e7.jpg)
如果你不了解Mesos或者Marathon,可以参考如下文章:文章1、文章2和文章3。
现在,我们有了功能性开发和持续集成的环境,可以开始搭建Mesos集群了。
如下是包含系统所有部分的fig.yml文件。在之前配置好的Jenkins和Docker Registry基础之上,我们还有Mesos master、Mesos slave、Mesosphere Marathon和负责内部Mesos通信的Zookeeper。
# Zookeeper: -p 2181:2181 -p 2888:2888 -p 3888:3888 zookeeper: image: jplock/zookeeper:3.4.5 ports: - "2181" master: image: redjack/mesos-master:0.21.0 hostname: master links: - zookeeper:zookeeper environment: - MESOS_ZK=zk://zookeeper:2181/mesos - MESOS_QUORUM=1 - MESOS_WORK_DIR=/var/lib/mesos - MESOS_LOG_DIR=/var/log ports: - "5050:5050" marathon: #image: garland/mesosphere-docker-marathon image: mesosphere/marathon links: - zookeeper:zookeeper ports: - "8080:8080" # this image does not respect MARATHON_ env variables, so adding the params via command command: --master zk://zookeeper:2181/mesos --zk zk://zookeeper:2181/marathon slave: image: redjack/mesos-slave:0.21.0 links: - zookeeper:zookeeper - master:master environment: - MESOS_MASTER=zk://zookeeper:2181/mesos - MESOS_EXECUTOR_REGISTRATION_TIMEOUT=5mins - MESOS_CONTAINERIZERS=docker,mesos - MESOS_ISOLATOR=cgroups/cpu,cgroups/mem - MESOS_LOG_DIR=/var/log volumes: - /var/run/docker.sock:/run/docker.sock - /usr/bin/docker:/usr/bin/docker - /sys:/sys:ro - mesosslace-stuff:/var/log expose: - "5051" jenkins: image: containersol/jenkins_with_docker links: - marathon:marathon volumes: - jenkins-stuff:/var/jenkins_home - .:/var/jenkins_data - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/usr/bin/docker ports: - "8081:8080" registry: image: registry environment: - STORAGE_PATH=/registry volumes: - registry-stuff:/registry ports: - "5000:5000"
fig.yml不多做解释。所有环境参数都是参考Docker Hub上对应镜像的使用介绍。
Mesos slave容器还使用了挂载socket的技巧,不过不需要做别的,因为slave是用root用户运行的,有访问socket的权限。
要注意Jenkins容器连接到了Marathon。这就要求能够从Jenkins容器发送请求到Marathon容器里。我们在下一章介绍部署的时候会详细说明。
现在重启系统,可以看到系统开始运行:
$ fig up Creating cddemo_registry_1... Recreating cddemo_zookeeper_1... Creating cddemo_master_1... Creating cddemo_slave_1... Recreating cddemo_marathon_1... Creating cddemo_jenkins_1...
容器启动非常快,但是要等所有服务都上线大概花了30秒(在MacBook Air上的Ubuntu虚拟机里)。
Mesos在http://localhost:5050。如下截图里可以看到一个活动的slave。该slave在本次配置下没有暴露任何端口。
![Screen-Shot-2015-02-28-at-18.08_.56_.png Screen-Shot-2015-02-28-at-18.08_.56_.png](http://dockerone.com/uploads/article/20150311/c4a62bc38e264045e28100869dbd6096.png)
从http://localhost:8080可以访问Marathon。
![Screen-Shot-2015-02-28-at-18.09_.14_.png Screen-Shot-2015-02-28-at-18.09_.14_.png](http://dockerone.com/uploads/article/20150311/d0ef65380ddcd3d4cd5ad5ac20864552.png)
部署 最后一步是将我们用Marathon在Mesos上新构建的Docker镜像部署好。
![15.02_.11_diagram4_.jpg 15.02_.11_diagram4_.jpg](http://dockerone.com/uploads/article/20150311/bdc805620d2c9cf6f153010ce0a7ef6e.jpg)
首先需要创建配置文件将应用安排到Marathon上,如下app_marathon.json:
{ "id": "app", "container": { "docker": { "image": "localhost:5000/containersol/nodejs_app:latest", "network": "BRIDGE", "portMappings": [ {"containerPort": 8000, "servicePort": 8000} ] "cpus": 0.2, "mem": 512.0, "instances": 1
这里也有一些需要注意的地方。比如,没有提到健康检查,需要告诉Marathon应用运行和不运行的时间。
一旦我们发布了这个JSON文件,就可以在deploy.sh里添加最新的脚本,移除最近运行的应用,并且用新的镜像重新部署它。当然有更好的升级策略,不过不在这里讨论。
#!/bin/bash if [ -z "${1}" ]; then version="latest" marathon="localhost" version="${1}" marathon=${MARATHON_PORT_8080_TCP_ADDR} # destroy old application curl -X DELETE -H "Content-Type: application/json" http://${marathon}:8080/v2/apps/app # I know this one is ugly. But it works for now. sleep 1 # these lines will create a copy of app_marathon.json and update the image version cp -f app_marathon.json app_marathon.json.tmp sed -i "s/latest/${version}/g" app_marathon.json.tmp # post the application to Marathon curl -X POST -H "Content-Type: application/json" http://${marathon}:8080/v2/apps -d@app_marathon.json.tmp
最后一步是将deploy.sh添加到Jenkins的配置中并运行构建。
![Screen-Shot-2015-02-28-at-19.18_.17_.png Screen-Shot-2015-02-28-at-19.18_.17_.png](http://dockerone.com/uploads/article/20150311/3e48d2f50638948cb70304bb38e35a01.png)
成功构建之后,可以看到应用运行在Marathon上:
![Screen-Shot-2015-02-28-at-19.21_.59_.png Screen-Shot-2015-02-28-at-19.21_.59_.png](http://dockerone.com/uploads/article/20150311/d696f3672a8a8235e737732be84d787a.png)
从http://localhost:31000可以访问我们自己的应用:
![Screen-Shot-2015-02-28-at-19.23_.29_.png Screen-Shot-2015-02-28-at-19.23_.29_.png](http://dockerone.com/uploads/article/20150311/2530305bec4bbd51a2a9bdfcf0f4322f.png)
现在可以试着改变应用并且触发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和自动扩展的能力,如下图所示:
![15.02_.11_diagram5_.jpg 15.02_.11_diagram5_.jpg](http://dockerone.com/uploads/article/20150311/32d40339d2bd92331fc9b0fdc8b0a4fb.jpg)
最后的话 一开始搭建这个系统主要是想帮助开发和运维人员学习如何在持续交付领域使用Docker和Mesos。在几个月的过程中我发现完整的系统很复杂,很难解释,更难搭建和使用。
我们请Marta marszal创建了本文的图表,以让文章更容易理解。
如果有改进本示例系统的建议,请一定告诉我们。本文的图表也可以随意下载和使用,不过请注明出处。CD_with_Mesos_Docker
所有资源都可以在GitHub上找到。
===========================
译者介绍
崔婧雯,现就职于VMware,高级软件工程师,负责桌面虚拟化产品的质量保证工作。曾在IBM WebSphere业务流程管理软件担任多年系统测试工作。对虚拟化,中间件技术有浓厚的兴趣。
原文链接:Continuous Delivery with Docker on Mesos in less than a minute – Part 2(翻译:崔婧雯 校对:李颖杰)
原文发布时间为:2015-03-11 本文作者:崔婧雯 本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。 原文标题:持续交付系列(二):使用Docker、Mesos实现持续交付
分享Docker监控体系(Kubernetes Mesos监控) 常不释放资源,造成高CPU占用;比如进程结束异常,不停的重启相同的进程;比如日志级别设置过低,大量日志输出,影响进程性能和占用大量磁盘空间。所以做监控时一定要遵循有自我安全控制的能力。监控工具在拿到生产环境中运行前,一定要先在测试环境中进行一段时间的试运行 。
基于Docker搭建多节点Mesos/Marathon 本文讲的是基于Docker搭建多节点Mesos/Marathon【编者的话】在之前的一篇博客中,我介绍了基于Docker搭建单机版Mesos/Marathon,但是仅仅使用了单个节点。而在这篇博客中,我将介绍基于Docker搭建多节点Mesos/Marathon,开发者可以使用3个节点快速地搭建一个真正的分布式容器集群系统。
去哪儿网利用Mesos和Docker构建dev—beta环境 本文讲的是去哪儿网利用Mesos和Docker构建dev—beta环境【编者的话】本文是@Container容器技术大会·北京站上去哪网带来的分享——去哪儿网利用Mesos和Docker构建dev—beta环境。
容器存储架构比较:Kubernetes、Docker和Mesos Compare 本文讲的是容器存储架构比较:Kubernetes、Docker和Mesos Compare【编者的话】 容器存储是容器离不开的一个话题,对于无状态的Docker容器,容器重启时容器数据会自动清除,一些静态的数据我们可以通过配置文件或者在容器build时直接写死。
去哪儿网基于Mesos和Docker构建私有云服务的实践 本文讲的是去哪儿网基于Mesos和Docker构建私有云服务的实践【编者的话】本文深入介绍了去哪儿网利用Mesos和Docker构建私有云服务的全过程,分享了从无状态应用向有状态应用逐步过度的经验与心得。
Docker、Kubernetes、Apache Mesos 之争 | 一个与传说不同的故事 本文讲的是Docker、Kubernetes、Apache Mesos 之争 | 一个与传说不同的故事【编者的话】有无数的文章、讨论和社交网络上的交流在比较 Docker、Kubernetes 和 Mesos。
相关文章
- Docker圣经:大白话说Docker底层原理,6W字实现Docker自由
- docker logs命令查看容器日志的时候,如何将标准输出和错误输出进行区分查看?
- 一文读懂,用 jenkins+docker 实现主从模式
- 最新 Docker 基于centos7.x 的安装
- 微服务轮子项目(21) -Docker安装
- docker swam 集群实现负载均衡
- 使用Docker实现Jenkins+Python + Pytest +Allure 接口自动化
- 使用可视化docker浏览器,轻松实现分布式web自动化
- 在 Ubuntu 中用 Docker 管理 Linux Container 容器
- 《ELK Stack权威指南(第2版)》一3.8 Docker日志
- docker 及docker-compose network概念及操作详解
- Docker安装elasticsearch、kibana和logstash,实现ELK
- docker安装配置elasticSearch
- docker-compose安装xxl-job
- Docker 核心技术与实现原理
- 【docker-oracle】java.sql.SQLException: ORA-28001: the password has expired(解决oracle密码过期)
- 《第一本Docker书(修订版)》——1.2 Docker组件
- 基于Docker实现Mysql主从同步
- 转 叫板OpenStack:用Docker实现私有云
- 教你如何修改运行中的docker容器的端口映射
- Docker搭建漏洞靶场
- <转载>通过 Docker 实现传统应用程序的现代化
- CentOS7下docker服务无法启动的一般检查
- 使用docker搭建mysql集群,实现负载均衡保证数据一致性方案实现
- docker dcm4chee