基于 Docker 实现 DevOps 的一些探索

DevOps 介绍

DevOps(Deveplopment 和 Operations 的简称),中译为开发运维一体化,可定义为是一种过程、方法、文化、运动或实践,主要是为了通过一条高度自动化的流水线来加强开发和其他 IT 职能部门之间的沟通和协作,加速软件和服务的交付。

在一个较成熟的软件和服务交付的团队里,就技术层面来说主要分为三个组成部分:开发、测试和运维。DevOps的作用就是将这三个部分紧密的连接起来,提供一条从软件开发到质量保障到技术运营的自动化流水线,加强不同角色之间的沟通和协作,基于用户需求实现软件和服务的快速交付。

“开发的这群傻叉新给的发布包又把系统 CPU 搞到100%了,应用又夯住了,都是些什么水平的人啊……”

“运维的这帮傻鸟技术太差,维护的是些什么稀烂的系统,在我这跑得好好的,上他们那应用就挂……”

“这是开发的锅……”

“这是运维的盘……”

描述得略显浮夸……但这种踢皮球的事情在 IT 公司里面真的是随处可见。无谓对错,也无锅可背,都是由开发和运维的基因所决定,但是最终的受害者却是用户。偏偏比较有意思的就是,开发和运维人员所做的这些也都是为了用户,开发人员必须根据用户的需求对应用的功能进行不停的变更,运维人员也必须根据用户的需求提供稳定和持续的服务。各司其职的同时也在两者之间形成了一面无形的墙,阻碍了开发和运维之间的沟通和协作,而DevOps的出现就是为了击碎这堵无形之墙。

DevOps落地的思考

技术层面

不是一个工具,但它需要被工具来实现,好在现今已经有了很多商业版和开源版的软件来形成一个有效的工具链来作为 DevOps 技术层面的支撑。但是光有工具还不够,再好的工具没人会用也没意义,所以需要有熟悉这个工具链的 IT 人员来提供技术支持,利用工具实现 DevOps 的高度自动化。

流程层面

DevOps 是一条从开发到运维的流水线,想要流水线能够高效的自动运行,必须要设定一系列的流程和规范来进行管控。IT 的管理者需要有基于软件或服务交付的全局观,能够清晰的认识到交付周期中不同角色的痛点在哪里,进而定制出合适的协作流程。

组织层面

DevOps 并不是简单的将开发部门和运维部门合并,而是加强开发部门和运维部门之间的协作和沟通。这需要管理者们对企业的 IT 部门有着足够的重视并且愿意去推动 DevOps 这种开发和运维间高效协作的模式,并且开发和运维的人员之间也需要有开放、接纳和协作的意识。

DevOps 是一个虚无缥缈的玩意儿,它并不能被工具或软件来简单的定义或量化。但工具或软件却是实现 DevOps 的一个重要组成部分,而 Docker 就是实现 DevOps 最合适的工具之一。

Docker介绍

Docker 是一个分布式应用构建、迁移和运行的开放平台,它允许开发或运维人员将应用和运行应用所依赖的文件打包到一个标准化的单元(容器)中运行。

容器是一个非常早期的技术,Unix 的 Chroot 功能可以说是容器的雏形,而后到大家所熟知的基于 Namespace 和 Cgroups 技术的 LXC(Linux Container),最后到现在如日中天的 Docker。站在前人的肩膀之上,Docker 最妙的地方就是将容器的使用简单化和标准化,再配合一波开源、互联网、云计算、大数据的浪潮,可谓是时代的宠儿。

很多人都喜欢拿容器和虚拟机对比,其实容器和虚机都是属于虚拟化技术的一种实现。两种架构在底层上相同,需要物理硬件和操作系统的支持。不同的是虚拟机场景中,Hypervisor(如 KVM)作为操作系统到虚拟机的中间层,而容器场景中 Docker Engine(以 Docker 为例)作为操作系统到容器的中间层。虚机封装操作系统和应用,而容器则直接封装应用,这也是为什么容器要比虚机轻量的原因。

上图中将虚拟机和容器的特性进行了对比,可以看出容器相对于虚拟机比较有优势的地方就是轻量、灵活、资源利用率高。缺点主要就是隔离性不如虚拟机,也就是一直被无限放大的容器的安全性问题。但偏偏就是因为容器没有完全被隔离到一个密封的小黑屋里面,所以才能带来比虚拟机更好的资源利用率。

个人认为容器在短期之内还取代不了虚机,在未来很长一段时间内会是容器和虚机并存的情况。而到最终谁替代谁,取决的不是技术本身,而是用户体验时代的需求。

Docker基本组件介绍

  • Docker Image:Docker 镜像是一个运行容器的只读模板。
  • Docker Container:Docker 容器是一个运行应用的标准化单元。
  • Docker Registry:Docker 注册服务器用来存放镜像。
  • Docker Engine:Docker引擎用来在主机上创建,运行和管理容器。

了解 Docker 的朋友都知道,Docker 将自身最主要的特点以下面这一句话来描述”Build,Ship and Run Any App Anywhere”。Build 出 Image,然后使用 Registry 来 Ship 镜像,最终使用 Engine 将 Container 和包含的 App 在任意平台(Anywhere)上运行起来。

Docker原生工具介绍

  • Docker Machine:让用户在基础架构平台快速部署Docker宿主机;
  • Docker Swarm:让用户在集群环境中调度和运行容器;
  • Docker Compose:让用户在集群环境中编排和部署应用。

这三个工具构成了 Docker 的原生环境,加上比较火的 Kubernetes、Mesos、Rancher、etcd 等外部生态,构建出了一个比较完整的 Docker 容器生态圈。对于原生工具和外部工具,个人觉得工具或技术并没有好坏之分,主要还是看适用场景和客户需求。而正是有这些生态的合作和竞争造就的乱世,才促进了容器技术的高速发展和逐步成熟。

Docker适用的场景

  • 持续集成和持续交付
  • 开发运维一体化
  • 容器云
  • 大数据

Docker 官方给的 Use Case 是 CI/CD、DevOps、Big Data 和 Infrastructure Optimization(Cloud)。

这里比较有意思的就是,这几个使用场景似乎正好描绘着 Docker 当前的发展史。

起初 Docker 的出现主要面向的对象是开发者,为开发者提供应用快速开发和测试的环境,这就是 CI/CD 所在的场景。

随后的发展使得 Docker 不再仅仅只关注开发层面的东西,而在向运维层面迈进,就出现了 DevOps 的场景。

既然有了运维,那肯定避免不了接触到基础架构的东西,而现今的基础架构基本都是围绕着云计算来展开,所以 Docker 又涉及到了基础架构优化的层面,也就是 Container Cloud。

基础架构的容器云有了,那么势必需要对云中的应用提供服务,加上 Docker 自身的许多优势,自然而然的又涉及到了 Big Data 的使用场景。

而 Docker 自身的解决方案 Docker Cloud 和 Docker Data Center 的先后推出也侧面反应了从开发到运维场景的逐步支持。DDC 的出现更是将目标直接瞄准了企业内部容器云。

难以分清是新技术成就了 Docker,还是 Docker 承载了新技术。至少就目前来看,Docker 的发展方向是顺应这个时代的。这只是三岁多的 Docker,不敢想象它在将来会有多大的能量爆发出来,将这些留给时间去述说。

Docker实现DevOps的优势

优势一

开发、测试和生产环境的统一化和标准化。镜像作为标准的交付件,可在开发、测试和生产环境上以容器来运行,最终实现三套环境上的应用以及运行所依赖内容的完全一致。

优势二

解决底层基础环境的异构问题。基础环境的多元化造成了从 Dev 到 Ops 过程中的阻力,而使用 Docker Engine 可无视基础环境的类型。不同的物理设备,不同的虚拟化类型,不同云计算平台,只要是运行了 Docker Engine 的环境,最终的应用都会以容器为基础来提供服务。

优势三

易于构建、迁移和部署。Dockerfile 实现镜像构建的标准化和可复用,镜像本身的分层机制也提高了镜像构建的效率。使用 Registry 可以将构建好的镜像迁移到任意环境,而且环境的部署仅需要将静态只读的镜像转换为动态可运行的容器即可。

优势四

轻量和高效。和需要封装操作系统的虚拟机相比,容器仅需要封装应用和应用需要的依赖文件,实现轻量的应用运行环境,且拥有比虚拟机更高的硬件资源利用率。

优势五

工具链的标准化和快速部署。将实现 DevOps 所需的多种工具或软件进行 Docker 化后,可在任意环境实现一条或多条工具链的快速部署。

原文链接:http://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=2649690467&idx=1&sn=b40985f6349000894cf0a2c100abbcc9&scene=21#wechat_redirect

时间: 2024-10-12 19:25:48

基于 Docker 实现 DevOps 的一些探索的相关文章

活动干货|基于Docker的DevOps实现

作者:精灵云 众所周知,传统开发模式已经面临了诸多难题.首先,在代码集成方面,因为没有合适粒度的代码合并,大规模的合并会有很大的风险,且传统开发模式中没有自动化测试,以至于测试周期特别长,人力成本高昂.其次,传统开发中的单体应用,通常都很庞大,单体应用把所有模块都包含在一个应用中,升级单个模块也需要对整个应用进行升级,所以升级和创新都很不方便,常见的比如银行系统就是如此. 同时,传统的开发模式中单独采用微服务的情况也会由于服务数量多而没有有效管理,在大批量的部署和测试的时候容易出现问题.除此之外

iHealth基于Docker的DevOps CI/CD实践

本文由1月31日晚iHealth运维技术负责人郭拓在Rancher官方技术交流群内所做分享的内容整理而成,分享了iHealth从最初的服务器端直接部署,到现在实现全自动CI/CD的实践经验. 作者简介 郭拓,北京爱和健康科技有限公司(iHealth).负责公司基础服务构建与研发流程定制,曾供职于乐视.21vianet,高龄攻城狮活跃在一线研发工作中,乐此不疲. 前言 相信我,一切事情的发生都是赶鸭子上架,没有例外.人类所有伟大的变革都是迫不得已,可又是那么顺其自然.比如容器(docker)技术的

中小团队基于Docker的devops实践

笔者所在的技术团队负责了数十个项目的开发和维护工作,每个项目都至少有dev.qa.hidden.product四个环境,数百台机器,在各个系统之间疲于奔命,解决各种琐碎的问题,如何从这些琐碎的事情中解放出来?devops成了我们不二的选择. 文章是基于目前的环境和团队规模做的devops实践总结,方案简单易懂,容易落地且效果显著. 实现方法 先来看下流程图: 工程师本地开发,开发完成后提交代码到代码仓库,[自动]触发jenkins进行持续集成与部署,部署完成会收到结果邮件.项目运行过程中可通过日

基于 Docker 的微服务架构实践

本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Docker 的技术体系的快速发展.本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结.希望给在创业初期探索如何布局服务架构体系的 DevOps,或者想初步了解企业级架构的同学们一些参考. Microservice 和 Docker 对于创业公司的技术布局,很多声

云端基于Docker的微服务与持续交付实践

云端基于Docker的微服务与持续交付实践笔记,是基于易立老师在阿里巴巴首届在线技术峰会上<云端基于Docker的微服务与持续交付实践>总结而出的. 本次主要讲了什么? Docker Swarm Docker Swarm mode 微服务支持(Docker集群架构体系) Docker的发展趋势和前沿成果 在Docker技术方面还是很佩服大牛的,所以赶紧写下笔记,追随大神的脚步. 阿里云资深专家易立,技术就不说了,他比其他直播间硬生生多讲了半个多点,于情于理还是万分感谢本次分享的(可惜devOp

基于Docker的TensorFlow机器学习框架搭建和实例源码解读

概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的机器学习开发环境,探索人工智能的奥秘,容器随开随用方便快捷.源码解析TensorFlow容器创建和示例程序运行,为热爱机器学者降低学习难度. 默认机器已经装好了Docker(Docker安装和使用可以看我另一篇博文:Ubuntu16.04安装Docker1.12+开发实例+hello world+w

Docker学习总结(7)——云端基于Docker的微服务与持续交付实践

本文根据[2016 全球运维大会?深圳站]现场演讲嘉宾分享内容整理而成 讲师简介 易立 毕业于北京大学,获得学士学位和硕士学位:目前负责阿里云容器技术相关的产品的研发工作. 加入阿里之前,曾在IBM中国开发中心工作14年,担任资深技术专员,负责IBM企业平台云产品线PureApplication System的研发工作:还负责和参与了一系列IBM在Web 2.0,SOA中间件的研发和创新,也曾为全球客户提供SOA技术咨询和项目实施. 日程 大家好,我演讲的主题是<云端基于Docker的微服务与持

企业为什么要使用基于Docker的PaaS/CaaS平台

前言 早在十多年前国内外的一些大厂就开始投入研发和使用容器技术,比如Google,对他们来说,使用容器能够充分利用计算资源节省硬件成本.而这几年--众所周知--真正把容器技术发扬光大的是Docker.Docker的slogan"Build,Ship & Run anywhere"定位非常清晰,Docker的出现打破了传统运维模式里从打包到部署的过程中环境.语言.平台不一致的乱象,将这一整套开发运维模式标准化了,从而真正帮助企业实践了DevOps和微服务化. 但是,国内的大型企业

《基于Python的DevOps实战》专栏目录明细

<基于Python的DevOps实战>专栏目录明细如下所示:一.效率神器之Python隔离工具VirtulEnv在项目中的应用二.用Gunicorn部署高性能Python WSGI服务器三.利用 Django REST framework 编写 RESTful API四.Flask之RESTful API介绍与实战五.Python 在 Docker-Compose 上的应用六.Web 全双工通信 -- WebSocket 协议详解七.批量运维管理器之Paramiko介绍八.自动化运维工具Fab