vagrant logo

Vagrant 是一个开源工具,使用它可以轻松创建和配置虚拟开发环境。它可以基于 VirtualBox 和配置管理工具如 Puppet, Chef 等。从 1.1 版本开始,它不只局限于 VirtualBox, 同时支持了其它虚拟化软件如 VMware 和亚马逊 EC2 等.

使用虚拟机的好处

  • 环境独立,每个项目一个配置
  • 复制开发环境给团队成员:根据实际经验,每次新成员到时配置和搭建好可运行的开发环境,都需要 1 天左右的时间。
  • 帮助测试人员构建测试环境

Vagrant 的主要概念

  • Provider 为 Vargrant 提供虚拟化支持的软件,比如 Virtural Box 或 vmware
  • Box 虚拟镜像,Vagrant 为不同的 Provider 提供了很多不同的基础镜像
  • Project 一个目录和目录中的 Vagrantfile 就是一个 project. 项目可以有子项目,子项目中的 Vagrantfile 可以继承和继承和重写父项目中的配置。可以通过git等版本管理工具来管理项目。
  • Vagrantfile Vagrant 的配置文件,使用 Ruby 的语法描述。里面定义了项目所使用的box,网络,共享目录,provision 脚本等。当 vagrant up 命令运行时,将读取当前目录的 Vagrantfile。
  • Provisioning 指的是虚拟机实例启动后,所需要完成的基础配置工作,比如说安装LAMP服务等。Vagrant支持使用shell,puppet,chef来完成provisioning工作。
  • Plugin Vagrant 提供了插件机制,可以很好的扩展对宿主机 OS, GuestOS,Provider,Provisioner 的支持,比如 vagrant 的 aws 和 openstack 支持都是通过 plugin 来实现的。

安装使用

安装 Virtual Box

安装 Vagrant

http://downloads.vagrantup.com/ 1

添加镜像到 Vargrant

vagrant box add precise64 http://files.vagrantup.com/precise64.box

也可以使用其它镜像或先下载到硬盘中:http://www.vagrantbox.es/ !!!这里的镜像没有经过人审核,谨慎使用!!!

vagrant box add <name> <file location>

初始化

创建一个目录(只为这一个虚拟环境)

mkdir ~/projects/game # 项目的虚拟机实例并不在这个目录,而是在 ~/.vagrant.d/boxex
cd ~/projects/game
vagrant init <name>  # 对应上面 vagrant box add 中的 name. 初始化后目录中会生成一个 Vagrantfile 配置文件

配置provisioning脚本

Vagrantfile 文件中添加

config.vm.provision "shell", path: "provision.sh"

shell 脚本位于与 Vagrantfile 同目录下的 provision.sh

sudo apt-get install vim git -y

启动和登录

vagrant up 启动
vagrant ssh  # SSH 登录
cd /vagrant  # 此目录对应宿主机上的 `~/projects/game`

配置文件

~/projects/game 目录下生成的 Vagrantfile 是配置文件,可以做个性化的定制。各配置项文件中有详细的说明。

制作基础镜像包

开发环境后,退出并关闭虚拟机,对开发环境打包

vagrant halt
vagrant package

也可以打包直接由 Virtual Box 生成的虚拟机

vagrant package --output <outputname.box> --base <virtual_box_path/virtual_box>

Vargrant 的工作原理

  1. 通过读取配置文件,获知用户需要的环境的操作系统、网络配置、基础软件等信息
  2. 调用虚拟化管理软件的 API, 创建基础环境
  3. 调用用户定义的安装脚本,安装需要的软件和服务

veewee

Veewee 是一个可以简单并重复创建、定制 Vargrant box 的工具。

在 Github 上的地址:https://github.com/jedi4ever/veewee

参考

  1. 目测已撞墙 



blog comments powered by Disqus