%E6%94%B9%E9%80%A0%E5%BC%80%E5%8F%91.jpg

Docker提升了软件测试的速度,毫无疑问,任何研发团队都应该选择它。下面我来告诉你为什么。

一直以来,部署测试环境是一个耗时并且繁杂的工作。即便测试环境中运行正确,开发、测试和生产环境的差别也会导致生产环境中出现问题。虚拟机通过拷贝一份操作系统数据解决了这个问题,代价是运行效率的降低和数Gb的磁盘空间。

Docker,作为一个轻量、快速的Linux虚拟化工具,应运而生。

Docker的优势

首先,任何一个技术人员都可以几秒内在本地搭建一个测试环境。容器取代了虚拟机,事实上作为一个进程运行在操作系统之上,所以能够秒间启动。镜像取代了虚拟机文件,但具有更多特性,如果本地存储了一个镜像,在下次构建或者拉取时只会加载差异的部分。

对于采用Docker的团队,搭建测试环境是很常用的,简化这类操作带来的效率也更明显。如果软件架构延伸到staging和production,那么在staging和production环境交付也可以这么简单。

另一个特性是它赋予你创建全新的虚拟设施的能力,你可以把虚拟设施添加到你的服务器集群中,一般称之为”green” build。”green” build环境是生产环境的拷贝,最后一轮回归测试在这个环境下进行。测试完成以后,通过部署脚本修改服务器为production模式。之前的production服务器,一般称之为”blue” build,被下线,以备代码回滚。上述的构建和部署过程,我们称之为”green/blue deployment”,我们也可以通过其他技术实现,Docker使这些操作更为简单。

为什么是Docker?

基于windows的软件编译成一个单独的安装程序时,web软件有一个不同的交付:创建运行在一台服务器上。传统的网站发布管理包含创造3-4个不同的层:开发、测试、生产,有时候还有运行时环境。这种模式里,至少每层有一台服务器以及一系列的运行规则。当软件以及为下一个操作准备好时,构建可能部署到下一层服务器。

虚拟机改变了这一切,服务器容下每个团队成员创建一个不同的服务。这允许每个分支可以独立测试,在最后阶段合并到主线,而不需要在新硬件上花费成千上万美元。每人一个虚拟机,这也使得当测试人员在秒级机器上重复测试产品补丁时,开发者在本地机上排除产品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和云服务器上的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


Mrexamo
231 声望14 粉丝