1+1>2:用Docker和Vagrant构建简洁高效开发环境

yne7 9年前

原文  http://cloud.51cto.com/art/201503/470256.htm


Docker和Vagrant经常被认为是两种相互替代的工具,其实它们可以结合使用,构建隔离的、可重复的开发环境。我们将证明该环境可以构建一个Docker容器以便开发Java应用程序,并充分利用Vagrant的强大功能,以解决一些现实当中的实际问题。

1+1>2:用Docker和Vagrant构建简洁高效开发环境

这篇博客的第一部分探讨了开发环境的常见缺陷、简单Docker环境的构建以及Vagrant+Docker配置具有的优点。但是如果你想就开始使用Docker和Vagrant,不妨直接跳到本文的这个章节:使用Vagrant,让Docker容器易于移植。

开发环境有什么问题?

要花很长的时间来构建

新的开发人员要花多长时间才能构建好当前项目的开发环境?答案取决于诸多因素(项目时间、从事该项目的开发人员数量等),但至少需要半天时间并不罕见。

嘿!其实应该比这快得多:查看脚本,执行脚本。就是这样。这两个步骤应该足以构建你的环境,并准备随时开发。

它可能与测试环境和生产环境大不一样

你有没有因构建的环境在机器上未通过而跳过自动化测试?或者更糟糕的是,即使更改的内容在机器上顺利编译,但是在持续整合(CI)服务器上老是失败,你有没有查过问题的根源出在哪里?

任何稍有不同,就会导致意料不到的行为。有的方法可能很简单,比如试一试框架的上一个版本,或者改用不同的项目。

查明什么导致你的系统出现不同行为是每个开发人员都应该避免的烦人任务。

虚拟机和Docker

因而,开发环境应该具有两个特点:

隔离:你不希望在测试某个新工具或不同项目时弄得一团糟。

可重复:同一个环境应该在每个团队成员的机器、持续整合服务器和生产服务器上都一再可复制。

虚拟机环境确保了这些特性,可是典型的虚拟机很耗费资源。开发人员需要每隔几分钟编码/构建/测试,不会接受虚拟化带来的开销。

这时候,Docker显得大有帮助。相比典型的虚拟机,其轻型容器极其快速,而且在开发人员当中极受欢迎。下面是来自Docker博客的一段摘要,解释了这种成功的原因:

  在问世后的头12个月内,Docker在初创企业和早期采用者当中迅速流行起来,他们重视该平台的这一功能,即可以将应用程序开发管理的问题与基础设施提 供、配置和运营的问题分离开来。Docker为这些早期用户提供了一种新颖的、更迅速的方法,可以构建分布式应用程序,另外提供了一种“编写一次到处运 行”的部署选择,部署对象从笔记本电脑、裸机、虚拟机到私有云/公有云,不一而足。

使用Docker来配置的、可重复的开发环境

为了举例说明,我们将构建一个构建并测试Vert.x HTTP服务器的Docker容器。

Vert.x是一种轻型应用程序框架,鼓励小型、独立微服务的架构。微服务“就是一种小巧的独立式可执行程序,可与其他的独立式可执行程序进行沟通”(Uncle Bob, http://blog.cleancoder.com/uncle-bob/2014/09/19/MicroServicesAndJars.html )。我们认为,它在Docker容器中再合适不过了,这就是为什么我们在此选择它作为例子。

要是你之前还没有安装过Docker,先安装它。你可以参阅官方文档( https://docs.docker.com/installation/ ),或者使用get docker script( https://get.docker.io )来安装它。我们假设在本章节中,我们在Linux上运行。即使Docker也可以安装到Windows和Mac上(借助boot2docker),我们会在下一章中看到如何使用Vagrant来安装、为什么Vagrant是一种更好的选择。

</div> </div>