Vagrant

Vagrant是一款用于构建及配置虚拟开发环境的软件，采用Ruby编写，主要以命令行方式运行。

其主要使用Oracle VirtualBox提供虚拟化系统，与Chef，Salt，Puppet等环境配置管理软件搭配使用，可以实现快速搭建虚拟开发环境。

该软件在1.1以后的版本中开始适配VMware等虚拟化软件，包括Amazon EC2等服务器虚拟化环境。

历史 
2010年1月，Vagrant 只是作为Mitchell Hashimoto的业余兴趣而启动的项目。同年3月，Vagrant的第一版本发布了。同年10月，Engine Yard宣布它们将赞助该项目。在原始版本的整整两年后——2012年3月， Vagrant 1.0（首个稳定版本）发布了。同年12月份，Mitchell成立了名为HashiCorp并全职开发Vagrant，但Vagrant仍保留自由软件。HashiCorp现今为Vagrant提供商业插件，并提供专业支持和训练。

初始Vagrant与VirtualBox绑定，但在版本1.1时开始支持其他虚拟化软件，如：VMware、基于内核的虚拟机（KVM）以及作为虚拟专用服务器（如：Amazon EC2）。Vagrant是用Ruby开发的。自版本1.6之后，Vagrant开始支持Docker容器，在一些例子，docker容器可以代替完整的虚拟系统。

架构 
Vagrant使用"Provisioners"和"Providers" 作为开发环境的构建模块。|--vagrant
|--Providers        如：VirtualBox、Hyper-V、Docker、VMware、AWS
|--Boxex            如：Centos7。与镜像类似
|--Provisioners     如：'yum intall -y python' 等自定义自动化脚本Vagrant作为最外层的虚拟软件，目的是帮助开发者更容易地与Providers互動。Vagrantfile记录Providers和Provisioners的相关信息。

Providers作为服务，帮助vagrant使用Boxes建立和创建虚拟环境。Vagrant提供的内嵌的Provider有 VirtualBox、Hyper-V、Docker、VMware，而AWS以插件形式提供支持。 

当使用VirtualBox等Provider，需要使用Boxes才能创建虚拟环境。当使用Docker作为Provider时，则不需要Boxes。

虚拟环境被创建后，开发者可以使用Provisioners自动化地自定义该虚拟环境。在Vagrant ecosystem 中(Ansible在2014已经可用了)，Puppet和Chef是最常用的 Provisioners。

参考资料 

自由跨平台軟體
用Ruby编程的自由软件
跨平台軟體
Linux虚拟化相关软件