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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 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搭建和管理企业级网站应用
相关文章
|
1天前
|
运维 Java Devops
阿里云云效操作报错合集之部署docker时遇到报错,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
2天前
|
Kubernetes 负载均衡 安全
【技术揭秘】阿里云容器服务Ingress高级玩法:如何轻松实现客户端原始IP透传,提升应用安全性与用户体验!
【8月更文挑战第17天】本文介绍如何在阿里云容器服务中配置Ingress以透传客户端原始IP地址。通过Ingress可实现HTTP负载均衡等功能。需在Ingress定义文件中添加特定注解,如`nginx.ingress.kubernetes.io/real-ip-header: X-Real-IP`。创建并应用Ingress配置后,后端服务可通过读取`X-Real-IP`头获取真实IP。此举有助于安全审计及流量分析。
|
4天前
|
Ubuntu Linux Docker
使用Docker进行容器化:从零开始的技术博文
【8月更文挑战第16天】从零开始掌握Docker容器化技术:本文详细介绍Docker基本概念、安装配置流程及核心组件。涵盖Docker镜像与容器管理、镜像加速配置,以及如何利用Dockerfile自动化构建镜像,助您快速入门并高效运用Docker进行软件开发与部署。
|
8天前
|
监控 负载均衡 开发者
掌握容器化技术:从零基础到实战应用
容器化技术正在快速改变软件开发和部署的方式。在这篇文章中,我们将从基础知识出发,逐步探讨容器化的核心概念、常用工具以及实际应用场景。无论你是刚接触容器化技术的新手,还是希望将现有知识应用到实际项目中的开发者,本文都将为你提供一个全面的入门指南和实战技巧。
|
13天前
|
运维 Kubernetes 开发者
使用容器化技术优化你的应用:从理论到实践
【8月更文挑战第7天】容器化技术通过提供一致的运行环境、高效的部署与扩展能力以及资源优化,为现代应用的开发和运维带来了显著的便利。通过本文的介绍,你应该对如何使用Docker来优化你的应用有了初步的了解。从编写Dockerfile到构建镜像,再到运行容器和使用Docker Compose管理多容器应用,每一步都是向更高效、更可靠的应用交付迈进的坚实步伐。
|
16天前
|
运维 Ubuntu Shell
Docker命令宝典:解锁容器化技术的无限可能,从镜像管理到容器操作,全面解析与实战指南!
【8月更文挑战第3天】Docker简化了应用的部署与运行,掌握其基本命令对开发者和运维人员至关重要。通过`docker images`可查看本地镜像;使用`docker pull`拉取如最新版Ubuntu镜像;`docker rmi`用于删除不再需要的镜像。运行容器可通过`docker run`命令,结合`-it`等选项提供交互式环境。`docker ps`显示运行中的容器,加上`-a`则列出所有容器。`docker stop`和`docker start`分别用于停止和重启容器,而`docker rm`则删除容器。
44 5
|
16天前
|
Kubernetes 监控 开发者
探索后端开发的新境界:微服务架构与容器化技术
在数字化时代的浪潮中,后端开发不断演进,涌现出创新的架构与技术。本文深入探讨了微服务架构和容器化技术如何重塑后端开发,提升系统的可维护性、可扩展性和部署效率。通过实际案例分析,我们揭示了这些技术背后的原理,并提供了实施的最佳实践和面临的挑战,为后端开发者提供一条清晰的技术升级路径。
40 3
|
22天前
|
存储 运维 安全
容器化技术在现代运维中的应用与挑战
【7月更文挑战第29天】随着云计算和微服务架构的兴起,容器化技术已成为现代软件开发和运维不可或缺的一部分。本文将探讨容器化技术如何革新运维领域,分析其带来的效率提升、环境一致性、持续集成和交付等优势。同时,我们也将面对容器化技术引入的安全风险、存储限制和网络复杂性等挑战,并提出相应的解决策略。通过实际案例分析,本文旨在为运维人员提供深入理解容器化技术的实际应用及其面临的挑战。
|
15天前
|
运维 开发者 Docker
深度探索微服务架构中的容器化技术
在现代软件开发中,微服务架构因其模块化和可扩展性而广受欢迎。而容器化技术,尤其是Docker,成为了支持微服务架构的核心工具。本文将探讨容器化在微服务架构中的作用,包括其如何提升开发效率、简化部署过程以及解决传统方法中的问题。通过具体实例和最佳实践的分析,读者将了解如何有效利用容器化技术来优化微服务架构。
|
17天前
|
Kubernetes 负载均衡 开发者
容器编排技术的选择与比较
【8月更文挑战第3天】选择合适的容器编排技术需要综合考虑多个因素。无论选择哪种技术,深入学习和理解,合理规划和设计容器环境,都是发挥容器编排技术最大价值的关键。希望本文能为读者在选择和比较容器编排技术时提供有价值的参考。