基于 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 化后,可在任意环境实现一条或多条工具链的快速部署。
基于 Docker 实现 DevOps 的一些探索的更多相关文章
- 中小团队基于Docker的devops实践
笔者所在的技术团队负责了数十个项目的开发和维护工作,每个项目都至少有dev.qa.hidden.product四个环境,数百台机器,在各个系统之间疲于奔命,解决各种琐碎的问题,如何从这些琐碎的事情中解 ...
- 基于 Docker 的 DevOps 搭建
一直对 DevOps 感兴趣,最近心血来潮,搭乘 Docker 搞一搞,Let‘s Go !!! 1.拉取 GitLab docker pull gitlab/gitlab-ce 2.Run Git ...
- 如何搭建基于Docker的gitlab服务器集成CI/CD实现DEVOPS(完整版)
From this lesson you will learn about 1,How to install and configure a docker based gitlab server 2, ...
- DevOps实践之一:基于Docker构建企业Jenkins CI平台
基于Docker构建企业Jenkins CI平台 一.什么是CI 持续集成(Continuous integration)是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来 ...
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 基于Docker持续交付平台建设的实践
导读:中国五矿和阿里巴巴联手打造的钢铁服务专业平台五阿哥,通过集结阿里巴巴在大数据.电商平台和互联网产品技术上的优势,为终端用户带来一站式采购体验.本文是五阿哥运维技术团队针对Docker容器技术在如 ...
- 【原创译文】基于Docker和Rancher的超融合容器云架构
基于Docker和Rancher的超融合容器云架构 ---来自Rancher和Redapt 超融合架构在现代数据中心是一项巨大的变革.Nutanix公司发明了超融合架构理论,自从我听说他们的“iPho ...
- 基于Docker的TensorFlow机器学习框架搭建和实例源码解读
概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...
- 容器化 — 基于Docker技术容器云
导读:本文介绍了基于Docker技术的企业级应用容器平台,从云的定义.云服务分类,到用友云PaaS基础平台.平台总体架构.架构预览.部署架构.平台核心价值和核心竞争力,阐述PaaS基础平台成为广大传统 ...
随机推荐
- WInforn中设置ZedGraph的焦点显示坐标格式化以及显示三个坐标数的解决办法
场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...
- preventDefault, stopPropagation, return false -JS事件处理中的坑
我们以一个文件上传ui重设计为例子来探讨这几个函数的区别: 其中的html代码如下: <div class="file-upload"> <input type= ...
- XMind破解版,2019年8月好使
越来越多的公司用思维导图了,进行编写测试用例,以下为破解版,亲身实验才发 的 ,中国时间2019年8月5日 下载安装包: 链接:https://pan.baidu.com/s/1-ubJLPSEpH ...
- Winform中设置ZedGraph鼠标双击获取距离最近曲线上的点的坐标值
场景 WInforn中设置ZedGraph的焦点显示坐标格式化以及显示三个坐标数的解决办法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...
- MES助力日立电梯提升精细化管理水平
项目背景介绍 日立电梯在2008年到2012年期间分别在五地工厂(上海.广州.天津.成都.扶梯)上线了ERP系统,在后续的使用时间里,逐渐发现现有ERP系统对于生产现场管理,产品质量追溯,产能控制等方 ...
- MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信
MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信 MQTT实战2 - 使用MQTTnet实现mqtt通信 源码下载 -> 提取码 QQ:505645074 MQTT ...
- sparkSQL中的example学习(3)
UserDefinedTypedAggregation.scala(用户可自定义类型) import org.apache.spark.sql.expressions.Aggregator impor ...
- pytest中怎么引用前置中的变量
本文主要总结的是pytest中的前置后置怎么返回参数 我们在做自动化的过程中,如果运用的是pytest的话,会遇到怎么使用前置条件中的变量 比如: @pytest.fixture() def init ...
- 2017 ICPC网络赛(西安)--- Xor
题目连接 Problem There is a tree with n nodes. For each node, there is an integer value ai, (1≤ai≤1,000 ...
- No archetypes currently available. The archetype list will refresh when the indexes finish updating
配置方法: 1. 在卡住的而画面点击"config" 2. 点击"Add remote catalog", 然后设置华为云的maven仓库地址, 然后点击&qu ...