Docker 提升了软件测试的速度,毫无疑问,任何研发团队都应该选择它。下面我来告诉你为什么。
一直以来,部署测试环境是一个耗时并且繁杂的工作。即便测试环境中运行正确,开发、测试和生产环境的差别也会导致生产环境中出现问题。虚拟机通过拷贝一份操作系统数据解决了这个问题,代价是运行效率的降低和数 Gb 的磁盘空间。
Docker ,作为一个轻量、快速的 Linux 虚拟化工具,应运而生。
首先,任何一个技术人员都可以几秒内在本地搭建一个测试环境。容器取代了虚拟机,事实上作为一个进程运行在操作系统之上,所以能够秒间启动。镜像取代了虚拟机文件,但具有更多特性,如果本地存储了一个镜像,在下次构建或者拉取时只会加载差异的部分。
对于采用 Docker 的团队,搭建测试环境是很常用的,简化这类操作带来的效率也更明显。如果软件架构延伸到 staging 和 production ,那么在 staging 和 production 环境交付也可以这么简单。
另一个特性是它赋予你创建全新的虚拟设施的能力,你可以把虚拟设施添加到你的服务器集群中,一般称之为” green ” build 。” green ” build 环境是生产环境的拷贝,最后一轮回归测试在这个环境下进行。测试完成以后,通过部署脚本修改服务器为 production 模式。之前的 production 服务器,一般称之为” blue ” build ,被下线,以备代码回滚。上述的构建和部署过程,我们称之为” green/blue deployment ”,我们也可以通过其他技术实现, 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 并没有区别,但确保应用到 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 技术。
原文链接:Docker 怎样改造你的开发团队