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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
21 5
|
5天前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
6天前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
7天前
|
运维 持续交付 虚拟化
深入解析Docker容器化技术的核心原理
深入解析Docker容器化技术的核心原理
26 1
|
8天前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
8天前
|
JavaScript 开发者 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
8天前
|
安全 Docker 微服务
深入理解Docker容器技术:从基础到实践
深入理解Docker容器技术:从基础到实践
|
10天前
|
安全 持续交付 云计算
揭秘云计算中的容器化技术及其优势
揭秘云计算中的容器化技术及其优势
18 1
|
10天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
5天前
|
存储 运维 数据中心
使用Docker容器化应用程序的优势与挑战
使用Docker容器化应用程序的优势与挑战
11 0
下一篇
无影云桌面