Docker怎样改造你的开发团队

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技术。

原文发布于微信公众号 - 云计算D1net(D1Net02)

原文发表时间:2015-09-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Debian社区

Linux 容器 vs 虚拟机 — 谁更胜一筹

自从 Linux 上的 容器 变得流行以来,了解 Linux 容器和虚拟机 之间的区别变得更加棘手。本文将向您提供详细信息,以了解 Linux 容器和虚拟机之间...

16820
来自专栏云计算与大数据

阅读:美团容器平台架构及容器技术实践

原文地址:https://note.youdao.com/share/?id=08d7c57b04dda159c53155b00cbbe5cb&type=not...

198110
来自专栏谭伟华的专栏

使用 Docker 部署前端自动化测试的尝试(一)

自动化测试是一个老生常谈的话题,往往应为界面变化太快,测试脚本更新跟不上需求变化而作罢。所以打算引入能自动生成测试脚本的 uirecorder 这一开源工具。并...

1.2K20
来自专栏云计算D1net

为什么Docker会受欢迎?看完这些才恍然大悟

Docker不是唯一的容器平台,也不是第一个推出的。其他框架,如OpenVZ和LXC,从20世纪20年代中期诞生。而其他类似容器的技术,如FreeBSD更进一步...

36460
来自专栏点点滴滴

关于Windows系统安装(一)

12760
来自专栏安恒信息

漏洞预警 | FFmpeg组件处理播放列表文件可能导致信息泄露

FFmpeg是一个免费的可以执行音讯和视讯多种格式的录影、转档、串流功能的软件,广泛的应用于各大视频网站上。 FFmpeg处理HLS播放列表文件的方式存在安全漏...

30170
来自专栏祝威廉

其实连Docker公司都把Docker用错啦

好吧,我承认我标题党了。但是这篇内容应该让你从一个新的角度理解Docker的本质是什么。

8620
来自专栏北京马哥教育

Linux 容器 vs 虚拟机 —— 谁更胜一筹

自从Linux上的容器变得流行以来,了解Linux容器和虚拟机之间的区别变得更加棘手。本文将向您提供详细信息,以了解Linux容器和虚拟机之间的差异。 Linu...

31240
来自专栏技术翻译

考虑将Docker引入您的数据科学工作流程

作为数据科学家的一个重要问题是正确配置数据科学环境。有时这意味着安装了很多软件包,等待软件包编译,处理模糊的错误,设置一切正常工作......大多数时候,这是一...

10700
来自专栏非著名程序员

Android NFC 技术解析,附 Demo 源码

近期由于项目需求,对 Android NFC 技术进行了一定的了解和深入,整合了一些网络、书籍资料,此文章仅作为自己的学习笔记。 NFC 是 Near Fiel...

46570

扫码关注云+社区

领取腾讯云代金券