开发者社区> 云栖小秘书> 正文

Docker在云平台上的最佳实践:基于容器技术的DevOps探索

简介: 12月9日,在云栖计算之旅线下沙龙上,阿里云容器服务团队的高级研发工程师秦妤嘉分享了《基于容器技术的DevOps探索》。首先介绍了DevOps和CD,接着分析了Docker如何打破传统CD壁垒,最后讲解了怎样从零开始搭建一个持续交付系统。
+关注继续查看

12月9日,在云栖计算之旅线下沙龙上,阿里云容器服务团队的高级研发工程师秦妤嘉分享了《基于容器技术的DevOps探索》。首先介绍了DevOps和CD,接着分析了Docker如何打破传统CD壁垒,最后讲解了怎样从零开始搭建一个持续交付系统。

视频回顾

DevOps与Continuous Delivery

DevOps

在一个较成熟的软件和服务交付的团队里,就技术层面来说主要分为三个组成部分:开发、测试和运维。开发测试团队比较关注的是代码能否运行,而运维比较关注的是系统能否在上线后稳定运行,于是隔阂就产生了。DevOps的出现就是为了解决这一问题。DevOps的作用就是将这三个部分紧密的连接起来,提供一条从软件开发到质量保障到技术运营的自动化流水线,加强不同角色之间的沟通和协作,从而减少资源浪费、提高质量,并将产品快速推向市场,快速有效的把一个想法变成价值交付到客户手中。

CD

52825a478044c7a423c164b0478c5b4900e119f6

怎样实现DevOps?我们定义了CD(持续集成),CD是一个方法。CD有三个重要的点:自动化、持续和有效的反馈。图中从左到右是代码到交付的过程。

CD过程中可能遇到几个问题,概括有三方面:环境一致性问题,开发人员之间环境也会产生不一致;版本管理问题;快速响应(发布、回滚)问题。

那么,问题的根源是什么呢?是因为Developer交付的只有代码,以及代码的依赖,而keep site running需要除了代码之外的运行环境,以及运行环境之间的依赖。

 

Docker如何打破传统CD壁垒?

Docker是实现DevOps最合适的工具之一,甚至变革了软件交付方式,可以有效解决持续交付过程中遇到的问题。

阿里云容器服务

6fae0ee87a729880328cbce7e0eb36620ee16a31

阿里云容器服务在资源层面有集群、节点,在内容层面有Compose模板、镜像,在应用层面有应用、服务和容器。

完整的容器化持续交付流程

cd96d08a5b1cbfeb2dce38318cd95bda3222dba7

传统的开发过程开发者的代码里有逻辑、应用以及代码依赖包,而我们的代码中会更多的加入Docker File、Docker Compose,用来制作集装箱和搬运集装箱,代码提交成功后代码服务器会通知CI server,CI server会拉取代码进行代码打包,打包后进行单元测试,如果单元测试没有通过,有效的反馈就会马上告诉开发者。如果通过,认为应用包括有应用,我们会根据代码给予的Docker file制作镜像,server会有配置的使用权限,会把镜像推送到阿里云容器,代码可交付的东西已经产生。

部署阶段,如果进行集成测试或回归测试,走测试环境,部署时Compose模板就是用来描述如何部署的,通过Jenkins来丰富功能,通过各种插件将镜像拉取下来部署在应用环境上,从而实现代码提交变更到整个部署过程。

Jenkins2.0

d631a7e517b14834b1d73e28f6e1e418d5df1977

Jenkins 2.0版本中包含了一个新的管道(pipline)构建交付系统,管道的设计理念是基于Groovy DSL,实现一套灵活、可扩展的持续发布(CD)工作流,将原本独立运行于单个或多个节点的任务连接起来,实现复杂发布流程。并且,Jenkins支持从代码库直接读取脚本。

 

从零开始搭建一个持续交付系统

f3f940b57bc3064a38f0487e368d8c60babd4554

Stage是对整个持续交付流程的清晰定义,是由自己写出来,单元测试结果也可以完美的展示,每一个阶段的耗时等可以直接读取日志查看,也可以在本地存储软件打包的结果。

持续交付流程设计

f01c97f9f6e4b27387158c5c2ecd717537102ac6

通过插件实现动态生成slave,执行job最后销毁的过程,我们也支持共享存储OSS,上传war包,用镜像的方式存储要交付的东西,部署是由阿里云自主开发的插件,调用容器服务的API。

Jenkins Master and Agent

41ab37516eee5b352c6328cae4eb8575d55078b3

Docker in docker方式是指,Agent会用到Docker进行镜像打包,如果有十个项目在Jenkins上执行时,就会涉及到在所有项目中安装agent非常消耗资源,所以我们采用父子结构,通过透传的方式,可以使用宿主机上Docker的agent服务器执行镜像构建和打包,做到自动化流程内的隔离。

发布策略

容器服务现在支持两种发布方式:

一是rolling update,依次停止老容器,启动新容器,整个过程自动化,无需用户手动操作,适合测试场景,适合于多副本的应用发布;一是蓝绿发布(热部署):不会停止老容器,为新服务启动新容器,需要用户设置路由权重,实现不同版本应用的上线、下线,适合于版本的快速发布,不会停机影响用户。

未来还会支持金丝雀发布(灰度):不会停止老容器,为新服务启动新容器,需要用户设置路由权重,实现不同版本应用的共存,支持A/B测试,适合多方案选择。

 

 

关于云栖计算之旅

云栖技术之旅,是由阿里云云栖社区主办,整合了阿里集团内部多个领域顶级技术专家与技术资源,通过线下技术培训的方式,为热爱技术的朋友提供一个交流&分享技术观点、碰撞精彩火花的平台。

第1期精彩回顾:https://yq.aliyun.com/articles/62414

第3期预告(12月23日前端专场):https://yq.aliyun.com/promotion/140

 

关于阿里云容器服务

阿里云容器服务(Container Service)提供了高性能可伸缩的容器应用管理服务,支持在一组云服务器上通过Docker容器来进行应用生命周期管理。容器服务极大简化了用户对容器管理集群的搭建工作,无缝整合了阿里云虚拟化、存储、网络和安全能力,打造Docker云端最优化的运行环境。容器服务提供了多种应用发布方式和流水线般的持续交付能力,原生支持微服务架构,助力用户无缝上云和跨云管理。

阿里云容器服务:https://www.aliyun.com/product/containerservice

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DevOps与阿里云容器服务(三)
### 前言 你若问十个哲学家什么是『哲学』通常你会得到十一种答案(有一种是你自己的)。 你若问十个持续交付布道师什么是『DevOps』,你恐怕得到的是上百种答案(因为你自己也有好几种)。 只有一个哲学问题是严肃的,那就是生与死。
19780 0
【阿里云资讯】Docker首个国内合作商,阿里云何以认定容器技术将成主流?
10月13日,在2016杭州·云栖大会上,全球知名的容器技术公司Docker与阿里云宣布达成战略合作,双方将在容器服务领域进行紧密合作,阿里云称其将为客户提供更加先进的云上应用管理服务。双方称在开源容器技术以及其发展方向共同努力,为客户提供本地化Docker的企业级支持和咨询服务。
4721 0
Docker公司DevOps领军人物John Willis:DevOps最佳实践
云栖TechDay31期,来自Docker公司的Devops理念的领军人物和布道者John Willis带来DevOps的三种方式的主要演讲。本文主要从为什么要用DevOps开始谈起,接着分享DevOps的三种方式,着重分析第一种方式,包括Immutable Service Delivery的Devops (Faster)、Docker (Effective) 、Supply Chain (Reliable),最后浅谈了第二种方式。
3790 0
3月24日云栖精选夜读:Docker日志收集最佳实践
今天又是这么晚和读者们相见了,想必作为程序员的我们有的可能才下班,还有的可能还奋斗在一线吧~那么小编精心挑选的这些文章正是给这些经常熬夜的程序猿们品读的,花个5分钟,读读这些文章,让劳累了一天心灵得到放松,明天又能充满活力地写代码!
2630 0
视觉中国:基于容器云的同城双活微服务架构上云实践
本文正在参加阿里云「最佳上云实践」征文大赛(https://yq.aliyun.com/activity/150),欢迎届时给我们投票 视觉中国集团(Visual China Group)创立于2000年6月,是中国领先的视觉影像产品和服务提供商。
13311 0
借助阿里云ECS实现传统.NET应用容器化(上)
我们都知道.NET Core应用可以跑在Docker上,那.NET Framework 4.x应用呢?借助阿里云ECS主机(Windows Server 2019 with Container版本),一切变得So Easy!
381 0
《容器上云的攻与守》-云栖演讲实录
今天上午王坚博士讲了一句话我比较有感触,大家做系统的时候,一定要想下你的系统的数据是怎么流转,这些系统的数据是怎么形成闭环。我们在设计阿里云的K8S容器服务ACK的时候也是融入了这些思考。 首先是跟大家先看一下整个容器上云的解决方案。首先因为你已经做过容器,所以当你容器上云的时候,实际上这个事情是非常简单的,我们只需要提供的相应的工具,帮助大家把容器镜像迁入阿里云同时通过工具把K8S的配置迁到阿
954 0
CentOS8上Docker部署Tcloud云测平台后端服务(部署失败)
CentOS8上Docker部署Tcloud云测平台后端服务(部署失败)
301 0
202
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载