DevOps:容器化后如何通过 DevOps 提高协作效能?

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 提到 DevOps 相信很多人并不陌生,DevOps 作为一个热门的概念,近几年被提及的频率也越来越高。有些人说它是一种方法论,有些人说它是一堆工具,有些人说它是企业的一种管理模式。那么,DevOps 究竟是什么呢?Docker 在 DevOps 中又扮演了什么角色呢?今天,我们就来详细聊聊这个话题。

提到 DevOps 相信很多人并不陌生,DevOps 作为一个热门的概念,近几年被提及的频率也越来越高。有些人说它是一种方法论,有些人说它是一堆工具,有些人说它是企业的一种管理模式。那么,DevOps 究竟是什么呢?Docker 在 DevOps 中又扮演了什么角色呢?今天,我们就来详细聊聊这个话题。


DevOps 的前生今世

1964 年,世界上的第一台计算机诞生,那时的计算机主要用于军事领域。计算机的运行离不开程序,那时负责编程的人员被称之为“程序员”。由于那时的程序比较简单,很多工作可以一个人完成,所以早期的计算软件交付流程是这样的:设计—开发—自测—发布—部署—维护。如图 1 所示:

3a5b069a251a4d1da2dcbad5224069b5.png

然而,随着计算机的发展和普及,越来越多的人接触到了计算机,这时的计算机也开始逐渐应用于商业领域,市场上出现了越来越多的办公、游戏等“软件”,也有越来越多的人开始从事软件开发这个行业,而这些软件开发者也有了更加专业的称呼“软件开发工程师”。


后来,又随着计算机软件规模的增大,软件也越来越复杂,这时一个人已经无法完成一个软件完整的生命周期管理。一个软件的开发需要各个团队的分工配合,同时职能划分也需要更加细化,整个软件管理流程中除了软件工程师外又增加了测试工程师和运维工程师。


分工之后软件开发流程如下:研发工程师做代码设计和开发,测试工程师做专业的测试工作,运维工程师负责将软件部署并负责维护软件。如图 2 所示:

90d2db631700402aa261437e7c012d4f.png

这种软件开发模式被称为瀑布模型,这种模式将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如瀑布流水一样,逐级的下降。

b09d5e713a3b4cce9850d4a64c01c6b9.png

瀑布模型的模式十分理想化,它假定用户需求十分明确,开发时间十分充足,且项目是单向迭代的。但随着互联网的出现,软件迭代速度越来越快,软件开发越来越“敏捷”,这时候大名鼎鼎的“敏捷开发”出现了,敏捷开发把大的时间点变成细小的时间点,快速迭代开发,软件更新速度也越来越快。


敏捷开发对传统的开发、测试、运维模式提出了新的挑战,要求更快的开发速度和更高的软件部署频率。而运维工程师信奉的则是稳定性压倒一切,不希望软件频繁变更而引发新的问题。于是乎,敏捷开发和运维工程师之间的矛盾便诞生了。


敏捷开发使得开发和运维工程师之间的矛盾变得越来越深,为了解决这个问题,DevOps 诞生了。DevOps 是研发工程师(Development)和运维工程师(Operations)的组合。下面是维基百科对 DevOps 的定义:


DevOps(Development 和 Operations 的组合词)是一种重视“软件开发人员(Dev)”和“IT 运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。


DevOps 的整体目标是促进开发和运维人员之间的配合,并且通过自动化的手段缩短软件的整个交付周期,提高软件的可靠性。


微服务、容器与 DevOps

软件开发早期,业务模型简单,很多功能都放在一个服务中,这时的服务称之为单体服务,然而随着业务功能越来越复杂,我们发现这种单体服务功能过于复杂,容易牵一发而动全身,导致开发维护成本很高,软件迭代成本也越来越高。


这时,软件开发者开始将单体服务拆分为多个小型服务,每一个小型服务独立负责一项任务,各个小型服务之间通过某种方式(RPC 或者 HTTP)相互调用,然后将不同的服务可以分发给不同的业务团队来开发,各个业务团队可以选择适合自己的编程语言来进行开发。


如果想要微服务实现更快的迭代和更加可靠的稳定性,一定是离不开一个一体化的 DevOps 平台,DevOps 的目标是构建一个稳定可靠的软件生命周期管理环境。所以它不仅可以帮助我们节省很多研发、测试和运维成本,还可以极大地提高我们的软件迭代速度,可以说微服务要想顺利实施,离不开 DevOps 的思想作为指导。


在 Docker 技术出现之前,人们通常更加关注如何做好 CI(Continuous Integration,持续集成)/CD(Continuous Delivery持续交付)以及 IAAS(基础设施即服务),这时我们称之为 DevOps 1.0 时代。


随着 Docker 技术的诞生,我们开始迎来了 DevOps 2.0 时代,DevOps 所有的这些需求都与 Docker 所提供的能力极其匹配。首先 Docker 足够轻量,可以帮助我们的微服务实现快速迭代。其次 Docker 可以很方便地帮助我们构建任何语言的运行环境,帮助我们顺利地使用多种语言来开发的我们的服务,最后 Docker 可以帮助我们更好地隔离开发环境和生产环境。


可以说 Docker 几乎满足了微服务的所有需求,Docker 为 DevOps 提供了很好的基础支撑。


这时的研发和运维都开始关注软件统一交付的格式和软件生命周期的管理,而不像之前一样研发只关注“打包前”,而运维只关注“打包后”的模式,DevOps 无论是研发环境还是生产环境都开始围绕 Docker 进行构建。


综上所述,微服务、Docker 与 DevOps 三者之间的关系,

  1. 云平台作为底层基础,采用 Docker 技术将服务做容器化部署,并且使用资源管理和调度平台(例如 Kubernetes 或 Swarm)来自动化地管理容器。
  2. DevOps 平台在云基础平台之上,通过流程自动化以及工具自动化的手段,为可持续集成和交付提供能力支持。
  3. 有了云平台和 DevOps 的支撑,微服务才能够发挥更大的作用,使得我们的业务更加成熟和稳定。


容器如何助力 DevOps


Docker 可以在 DevOps 各个阶段发挥重要作用,例如 Docker 可以帮助我们在开发阶段提供统一的开发环境,在持续集成阶段帮助我们快速构建应用,在部署阶段帮助我们快速发布或更新生产环境的应用。


下面我们来详细认识一下 Docker 在整个 DevOps 阶段究竟发挥了哪些作用。


开发流程

开发人员可以在本地或者开发机上快速安装一个 Docker 环境,然后使用 Docker 可以快速启动和部署一个复杂的开发环境。相比传统的配置开发环境的方式,不仅大大提升了开发环境部署的效率,同时也保证了不同开发人员的环境一致。


集成流程

通过编写 Dockerfile 可以将我们的业务容器化,然后将我们的 Dockerfile 提交到代码仓库中,在做持续集成的过程中基于已有的 Dockerfile 来构建应用镜像,可以极大提升持续集成的构建速度。


这主要是因为 Docker 镜像使用了写时复制(Copy On Write)和联合文件系统(Union FileSystem)的机制。Docker 镜像分层存储,相同层仅会保存一份,不同镜像的相同层可以复用,比如 Golang 容器在一次构建停止后,镜像已经存在于构建机上了,当我们开始新一轮的测试时,可以直接复用已有的镜像层,大大提升了构建速度。


部署流程

镜像仓库的存在使得 Docker 镜像分发变得十分简单,当我们的镜像构建完成后,无论在哪里只需要执行 docker pull 命令就可以快速地将镜像拉取到本地并且启动我们的应用,这使得应用的创建或更新更快、更高效。


另外,Docker 结合 Kubernetes 或者其他容器管理平台,可以轻松地实现蓝绿发布等流程,当我们升级应用观察到流量异常时,可以快速回滚到稳定版本。


DevOps 工具介绍

工欲善其事,必先利其器,要想顺利落地 DevOps,工具的选择十分重要,下面我们来看下除了Docker 外还有哪些工具可以帮助我们顺利地构建 DevOps 平台。


Git

Git 是一种分布式的版本控制工具, 是目前使用最广泛的 DevOps 工具之一。Git 相比于其他版本控制工具,它可以实现离线代码提交,它允许我们提交代码时未连接到 Git 服务器,等到网络恢复再将我们的代码提交到远程服务器。


Git 非常容易上手,并且占用空间很小,相比于传统的版本控制工具(例如:Subversion、CVS 等)性能非常优秀,它可以帮助我们快速地创建分支,使得团队多人协作开发更加方便。


目前全球最大的在线 Git 代码托管服务是 GitHub,GitHub 提供了代码在线托管服务,可以帮助我们快速地将 DevOps 工作流集成起来。除了 GitHub 外,还有很多在线代码托管服务,例如 GitLab、Bitbucket 等。


Jenkins

Jenkins 是开源的 CI/CD 构建工具,Jenkins 采用插件化的方式来扩展它的功能,它拥有非常丰富的插件,这些插件可以帮助我们实现构建、部署、自动化等流程。它还拥有强大的生态系统,这些生态系统可以很方便地与 Docker 和 Kubernetes 集成。Jenkins 几乎可以和所有的 DevOps 工具进行集成。


Ansible

Ansible 是一个配置管理工具。Ansible 可以帮助我们自动完成一些重复的 IT 配置管理,应用程序部署等任务,还可以帮助我们放弃编写繁杂的 shell 脚本,仅仅做一些 YAML 的配置,即可实现任务下发和管理工作。并且 Ansible 的每一行命令都是幂等的,它允许我们多次重复执行相同的脚本并且得到的结果都是一致的。


Kubernetes

Kubernetes 是当前最流行的容器编排工具之一,Docker 帮助我们解决了容器打包和镜像分发的问题,而 Kubernetes 则帮助我们解决了大批量容器管理和调度的问题,它可以打通从研发到上线的整个流程,使得 DevOps 落地更加简单方便。


结语

DevOps 虽然已经被提及很多年,但是一直没有很好的落地,直到 2013 年 Docker 的诞生,才使得 DevOps 这个理念又重新火了起来,因为 Docker 为我们解决了应用的构建、分发和隔离的问题,才使得 DevOps 落地变得更加简单。


DevOps 提倡小规模和增量的服务发布方式,并且 DevOps 还指导我们尽量避免开发大单体(把所有的功能都集成到一个服务中)应用,这一切,都与 Docker 所能提供的能力十分匹配。因此,Docker 是非常重要的 DevOps 工具。


那么,除了我介绍的这些 DevOps 工具,你还知道其他的 DevOps 工具吗?


下一课时,我将会为你讲解 DevOps 中最重要的流程持续集成与交付。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
195 3
|
3月前
|
运维 监控 Devops
构建高效自动化运维体系:DevOps与容器化实践
【7月更文挑战第44天】在现代IT基础设施管理中,自动化运维已成为提升效率、降低成本、确保系统稳定性的关键。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系。我们将分析这一体系对提高软件交付速度、优化资源利用率以及增强系统可靠性的积极影响,并提供一系列实施策略和最佳实践,帮助企业实现运维自动化转型。
|
3月前
|
缓存 资源调度 Kubernetes
阿里云云效产品使用合集之如何将两个独立的代码仓库构建并部署到同一个容器内
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
运维 监控 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【7月更文挑战第58天】 在当今的软件开发领域,"DevOps"和"容器化"已成为提升项目交付速度、确保环境一致性以及实现持续集成和持续部署(CI/CD)的关键策略。本文深入探讨了如何将DevOps理念与容器化技术相结合,以构建一个既高效又稳定的云基础设施。通过分析现代运维的挑战,我们提出了一套实践方案,并讨论了该方案在现实环境中的具体应用及潜在益处。文章不仅为读者提供了理论指导,还分享了来自一线实践的经验教训,旨在帮助组织优化其云基础设施管理,提高业务竞争力。
|
4月前
|
运维 监控 Devops
DevOps(Development和Operations的组合)是一种强调软件开发(Dev)和信息技术运维(Ops)之间协作与沟通的文化、方法和实践。
DevOps(Development和Operations的组合)是一种强调软件开发(Dev)和信息技术运维(Ops)之间协作与沟通的文化、方法和实践。
|
4月前
|
Kubernetes Devops 持续交付
容器化技术在DevOps中的应用
【7月更文挑战第6天】容器化技术在DevOps中的应用极大地提高了软件开发的效率和可靠性。通过自动化部署、持续集成与持续交付、环境一致性以及资源管理和监控等功能,容器化技术为开发人员和运维人员提供了更加便捷、高效的管理和部署方式。随着云计算技术的不断发展和普及,容器化技术将在DevOps中发挥越来越重要的作用。
|
5月前
|
敏捷开发 Java 持续交付
阿里云云效产品使用问题之效能洞察的源数据该如何导出
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
API 开发工具 数据安全/隐私保护
阿里云云效操作报错合集之流水线镜像已经生成,但容器没有出现,是什么导致的
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
4月前
|
敏捷开发 Kubernetes 测试技术
阿里云云效产品使用合集之流水线创建时,不想选择节点和容器,该如何操作
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之需要在某个企业或团队的云效实例中进行协作,该如何操作
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。