Docker提高了软件测试的速度,毫无疑问,任何研发团队都应该选择它。下面我来告诉你为何。linux
一直以来,部署测试环境是一个耗时而且繁杂的工做。即使测试环境中运行正确,开发、测试和生产环境的差异也会致使生产环境中出现问题。虚拟机经过拷贝一份操做系统数据解决了这个问题,代价是运行效率的下降和数Gb的磁盘空间。git
Docker,做为一个轻量、快速的Linux虚拟化工具,应运而生。github
首先,任何一个技术人员均可以几秒内在本地搭建一个测试环境。容器取代了虚拟机,事实上做为一个进程运行在操做系统之上,因此可以秒间启动。镜像取代了虚拟机文件,但具备更多特性,若是本地存储了一个镜像,在下次构建或者拉取时只会加载差别的部分。web
对于采用Docker的团队,搭建测试环境是很经常使用的,简化这类操做带来的效率也更明显。若是软件架构延伸到staging和production,那么在staging和production环境交付也能够这么简单。docker
另外一个特性是它赋予你建立全新的虚拟设施的能力,你能够把虚拟设施添加到你的服务器集群中,通常称之为”green” build。”green” build环境是生产环境的拷贝,最后一轮回归测试在这个环境下进行。测试完成之后,经过部署脚本修改服务器为production模式。以前的production服务器,通常称之为”blue” build,被下线,以备代码回滚。上述的构建和部署过程,咱们称之为”green/blue deployment”,咱们也能够经过其余技术实现,Docker使这些操做更为简单。数据库
基于windows的软件编译成一个单独的安装程序时,web软件有一个不一样的交付:建立运行在一台服务器上。传统的网站发布管理包含创造3-4个不一样的层:开发、测试、生产,有时候还有运行时环境。这种模式里,至少每层有一台服务器以及一系列的运行规则。当软件以及为下一个操做准备好时,构建可能部署到下一层服务器。windows
虚拟机改变了这一切,服务器容下每一个团队成员建立一个不一样的服务。这容许每一个分支能够独立测试,在最后阶段合并到主线,而不须要在新硬件上花费成千上万美圆。每人一个虚拟机,这也使得当测试人员在秒级机器上重复测试产品补丁时,开发者在本地机上排除产品bug成为可能。一部分测试人员对pre-release版本进行回归测试,其余测试人员能够测试下一版本,同时研发人员能够在新分支上开发新特性。服务器
虚拟机的问题是大小和速度。每一个虚拟机包含一整个host操做系统(简称OS),建立一个虚拟机就意味着占据数GB的空间,建立一整个新运行系统,而后安装“构建”在操做系统里。更糟糕的是,操做系统在应用空间里运行——这就像在宿主OS里还有一个OS。虚拟机的boot/ install进程可能须要几分钟到1小时,这对于中断流而言非常够了。在不影响性能的状况下技术人员可能会在笔记本上启动host 1-2个虚拟机;试着在网络上按需取得虚拟机的建立,这彻底是“私有云”项目。网络
Docker在OS内核而不是应用空间运行,换句话说,它是OS的一部分。做为OS的一部分运行限制了Docker只能在比较新的linux内核上运行,包括host机和容器,可是这样也很大程度上简化了OS的进程管理。Docker在内核里运行减小了不少冗余。举个例子,一个宿主机上的全部Docker容器共享一个内核,而每一个vm都须要一个内核。这意味着Docker容器不须要操做系统式的“boot”(启动),由于容器基于的内核一直在运行。架构
全部这些特性使得Docker可以快速地建立机器,全部进入生产环境的机器都是基于镜像的拷贝,而不是一个现有的服务器的补丁。
这种在broken state状况下中止和保存一个容器的能力,使得在Docker环境下调试更为容易。若是调试破坏了环境条件,或者在某些方式下“弄脏”环境,从新恢复broken state是很是简单的。Docker对于任何应用在任何Linux服务器上都是可用或者运行着的;容器的快启动和可丢弃性对于批处理等任务特别方便。
Docker容器有一些工具帮助你配置甚至模拟完整的基础设施,这样团队生活更happy。其中最受欢迎的是Docker Compose,以前部署配置复杂的多个程序,如今仅仅一条命令就ok了。
本地的Docker和云服务器上的docker并无区别,但确保应用到production就彻底不同了。Docker早起像是Wild West,当它开始进入生产的时候。共同的挑战是 容器编排,即将Docker化的应用和服务,规划到计算机资源的集群中。这意味着企业不在意容器在哪里运行,只在意它们在运行并可以正确地处理请求,不论是应用是网站交互,内部服务、数据库,仍是消息队列。
编排领域领域的大玩家有AWS EC2 Container Service,,Docke Swarm 和Mesos.。编排的服务能够很好地管理容器,同时面临着一些关键问题,好比blue/green部署,容器恢复,负载均衡,服务恢复和容器网络互联。
当评估Docker在生产环境下的应用时,固然其余的挑战好比日志、环境变量系统配置。看你是否准备迁移到Docker最好的标志就是看你离12 Factor App有多近。
Don Taylor在CodeMash的Docker教程让观众了解了Linux上安装Docker、建立容器和在容器中执行命令。要深刻了解,github是最好的选择。
安装一个Linux虚拟机、安装Docker、建立容器,而后本身去决定是否在你的组织里使用Docker技术。
本文由赵帅龙编译整理,原文连接:http://blog.tenxcloud.com/?p=742