Vagrant基于工业标准化技术至上提供了易于配置,可重复部署以及可移植的工作环境,并且通过一个简单的一致性的工作流提供控制来帮助你和你的团队最大化生产力和可伸缩性。

为了实现这个奇迹,Vagrant站在了巨人的肩膀之上。主机由VirtualBox,VMware,AWS或其他provider提供。然后,工业标准化的供给工具,例如shell脚本,Chef或Puppet,可以提供自动化安装和配置主机中的软件。

个人感觉Vagrant和Docker类似,通过组合底层开源技术加上自己开发的程序/脚本以及良好定义的规则,实现了标准化的快速部署虚拟系统的架构。所不同的是,Docker采用的是轻量级的容器技术,Vagrant则使用kvm/virtualbox等重量级的全/半虚拟化平台。

Vagrant实现的是根据模版快速提供虚拟系统,大规模生产虚拟系统,需要结合进一步定制的管理控制平台来实现PaaS。

Vagrant更适合部署完全虚拟化集群,可以实现更为复杂的系统模拟,在特定的需要安全性隔离环境以及需要实现完整的操作系统功能的虚拟系统。

Vagrant优势

  • 对于开发者

Vagrant隔离了依赖和它们的配置到一个单一的一次性的,一致性的环境,不需要担忧任何使用的工具。一旦你或者其他人创建了一个Vagrant文件,你只需要使用 vagrant up 然后,所有软件被安装和配置。其他团队成员也适用相同的配置文件创建他们的环境,无论你们是工作在Linux, Mac OS X或Windows 。所有团队成员在相同环境中运行代码,基于相同的依赖。

  • 对于操作工程师

Vagrant给予操作工程师一个一次性环境并且一致性的工作流用于开发和测试基础架构管理脚本。你可以快速地像shell脚本一样测试。Chef cookbooks, Puppet modules和使用本地虚拟化技术,诸如Virtualbo或VMware。然后,使用相同的配置,你可以在云平台,例如AWS或者RackSpace(两者使用相同的工作流)上测试这些脚本。放弃你自己定制的脚本来重启EC2绘画,停止针对不同主机调试SSH prompts,使用Vagrant可以给你的生活带来有序。

  • 对于设计师

Vagrant自动化所有需要用于web app的环境,以便设计师专注于自己擅长的设计。对于开发提供的环境,只需要用相同的vagrant配置,使用命令 vagrant up 就可以开始设计。

安装

安装程序将自动添加vagrant到你的系统路径,这样就可以在终端中直接使用。如果你通过RubyGems安装了旧版本Vagrant 1.0.x,请删除掉重新安装最新版本。

当前版本已经不支持通过RubyGem安装

开始使用

更为详细的OReilly书籍Vagrant: Up and Running

vagrant init hashicorp/precise32
vagrant up

上述命令创建运行 Ubuntu 12.04 LTS 32-bit的虚拟机,就可以通过 vagrant ssh 登录这个虚拟机

项目设置

配置任何Vagrant项目的第一步是创建一个Vagrantfile。这Vagrantfileyou两个目的:

  • 标记项目的根目录,一些Vagrant配置归属到这个根目录中
  • 描述主机类型和需要运行项目的资源,例如软件安装以及如何访问它

Vagrant有一个内建命令来初始化目录 vagrant init 。这个命令将Vagrantfile放到当前目录,可以查看这个文件(包含了很多注释和例子)。也可以在已经存在的目录执行 vagrant init 来设置Vagrant。

Boxes

Vagrant使用一个基础镜像来clone虚拟机,这个基础镜像称为boxes,并且在 HashiCorp’s Atlas box catalog 可以找到各种可用的镜像

以下以安装vagrant init bento/centos-7.1为例

mkdir centos-7.1
cd centos-7.1
vagrant init bento/centos-7.1

立即提示

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

在这个目录下执行

vagrant up

则开始下载镜像并启动

再增加一个bento/centos-6.7

mkdir centos-6.7
cd centos-6.7
vagrant init bento/centos-6.7
vagrant up

vagrant up下载镜像失败无法断点续传处理

如果你已经运行了vagrant init创建了box,则不再需要下面这个vagrant box add 这个操作是存储box到一个特殊的名字,这样多个Vagrant环境可以重用它。

通过多个项目,可以重用被添加的box。每个项目使用一个box来作为初始镜像来clone,并且永远不会更改这个基础镜像。这也意味着,如果有两个项目都是用前述的 bento/centos-6.7,添加文件到其中的一个guest主机,将不会影响另外一个主机。

up 和 ssh

启动Vagrant环境

vagrant up

完成启动后,执行命令

vagrant ssh

这个vagrant ssh命令将登录到SSH环境。注意,不要使用 rm -rf / ,因为 Vagrant 共享了一个 /vagrant 实际是那个包含了 Vagrantfile 的物理服务器目录(但是这个目录由于可以从虚拟机中访问,所以要注意不要误删除)。

如果你不再需要这个虚拟机,则运行 vagrant destroy 来销毁虚拟机。

SYNCED FOLDERS

这里我遇到一个问题,就是在虚拟机执行df命令,输出中显示一个错误

df: `/vagrant': No such file or directory

原因是升级过虚拟机中的Linux内核,需要升级虚拟机中CentOS内核后重新编译VirtualBox扩展包的内核模块

修改 synced 目录

可以通过修改 Vagrantfile 配置来实现对默认共享目录位置的修改,例如

config.vm.synced_folder "/Users/huatai/Documents/Vagrant/sharedata", "/sharedata"

可以用来在不同的虚拟机之间使用共享目录,这样方便部署一个简单的共享集群。即,在物理服务器上构建一个共享给多个虚拟机使用的网络存储(不需要单独部署NFS或者CIFS),方便构建测试集群。

备份

快照

参考