Vagrant是一个简单易用的部署工具,用英文说应该是orchestration tool。它能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境。

Vagrant的基本工作原理大致如下:

  1. 首先,通过读取配置文件,获知用户需要的环境的操作系统、网络配置、基础软件等信息;
  2. 然后,调用虚拟化管理软件的API(VMWare Fusion,Oracle VirtualBox, AWS, OpenStack等)为用户创建好基础环境;
  3. 最后,调用用户定义的安装脚本(shell,puppet,chef)安装好相应的服务和软件包;

Vagrant的主要应用场景

  • 开发环境部署
    作为开发人员可能会涉及到不同的开发语言和不同的包依赖,搭建开发环境总是一件很麻烦的事情,有些语言有强有力的项目构建工具支持,比如Java的Maven,而有些语言则没有这么方便的工具,比如Python。特别是随着时间的推移,开发环境也会变得很混乱。
    Vagrant通过脚本文件的描述创建一个虚拟机实例,并通过shell脚本或puppet配置好开发环境,解决了开发环境的自动化搭建。同时,vagrant创建的开发环境也能被轻松的清理和共享,特别是对于一个团队,构建标准的开发环境将变得很轻松。
  • 测试环境部署
    对于测试环节中的集成测试,特别是分布式系统的集成测试,测试环境的搭建也是一个费时费力的工作。Vagrant支持多个实例的部署,可以在单机上创建多个虚拟机实例进行自动化的集成测试。如果单机的测试环境还不够大,也可以将这个工作交给AWS和OpenStack这样的云去完成。

Vagrant的主要概念

  • Provider
    Provider指的是为Vagrant提供虚拟化支持的具体软件,比如vmware或virtual box。
  • Box
    Box代表虚拟机镜像。Vagrant根据Porvider的不同提供了很多的基础镜像(通过url从s3上获取),用户可以根据自己的需求使用vagrant package制作属于自己的box。
  • Project
    一个目录和目录中的Vagrantfile就组成了vagrant的一个项目,项目下可以有子项目,子项目中的Vagrantfile配置将继承和重写父项目的配置。项目的虚拟机实例并不会存储在这个目录(存储在~/.vagrant.d/box下),所以可以通过git等版本管理工具来管理项目。
  • Vagrantfile
    Vagrant的配置文件,使用Ruby的语法描述。里面定义了项目所使用的box,网络,共享目录,provision脚本等。当vagrant up命令运行时,将读取当前目录的Vagrantfile。
  • Provisioning
    Provisioning指的是虚拟机实例启动后,所需要完成的基础配置工作,比如说安装LAMP服务等。Vagrant支持使用shell,puppet,chef来完成provisioning工作。
  • Plugin
    Vagrant提供了插件机制,可以很好的扩展对宿主机OS, GuestOS,Provider,Provisioner的支持,比如vagrant的aws和openstack支持都是通过plugin来实现的。

QuickStart

安装Provider

我们使用VirtualBox作为虚拟化的Provider,下载并安装VirtualBox即可。https://www.virtualbox.org/wiki/Downloads

安装Vagrant

Vagrant提供了windows,mac,deb和rpm的安装包,下载最新版本1.3.5的安装即可。Ubuntu软件仓库的版本是1.0.1的,比较老了,在读取配置文件的时候可能会遇到问题,所以不建议直接从仓库安装。

http://downloads.vagrantup.com/

创建项目

创建一个文件夹,并进入

mkdir linux-dev
cd linux-dev

初始化项目

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

运行玩命令后,我们应该会发现在当前目录下出现了Vagrantfile文件,内容如下:

# -*- mode: ruby -*-
# vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com. # Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "precise64" # The url from where the 'config.vm.box' box will be fetched if it
# doesn't already exist on the user's system.
config.vm.box_url = "http://files.vagrantup.com/precise64.box" ...

这个文件有详细的注释和说明,其中config.vm.box指定了所使用的box,如果该box不存在于本地,vagrant将会自动从config.vm.box_url处下载并添加到本地。

从名字可以看出这个box是一个ubuntu server 12.04 64位的virtual box镜像。

配置provisioning脚本

我们通常在安装完操作系统后希望能装一些软件或做一些配置,provisioning脚本正好能完成这个工作。比如完成操作系统安装后自动安装vim和git。

编辑Vagrantfile,添加一行

  # The url from where the 'config.vm.box' box will be fetched if it
# doesn't already exist on the user's system.
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
# 添加下面的这行
config.vm.provision "shell", path: "provision.sh"

这一行指定了provision使用shell脚本,shell脚本位于与Vagrantfile同目录下的provision.sh

创建provision.sh

sudo apt-get install vim git -y

启动实例

在linux-dev目录下运行vagrant up,vagran就会启动由该目录下Vagrantfile指定的虚拟机实例。

首先,vagrant会去本地查找box,如果没有就从远程下载(从s3上下载很慢,可以先用迅雷离线下载到本地,然后再通过vagrant box add命令来添加);

然后,vagrant就会启动虚拟机,做一些网络配置,并将当前目录挂载到虚拟机的/vagrant下,使其能在虚拟机和物理机直接共享。

最后,vagrant会开始provisioning的过程,为虚拟机配置基础的软件(只在第一次启动时进行,以后可通过vagrant provision命令触发)。

AlexYang-mba:linux-dev alex$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] The guest additions on this VM do not match the installed version of
VirtualBox! In most cases this is fine, but in rare cases it can
cause things such as shared folders to not work properly. If you see
shared folder errors, please update the guest additions within the
virtual machine and reload your VM. Guest Additions Version: 4.2.0
VirtualBox Version: 4.3
[default] Mounting shared folders...
[default] -- /vagrant
vagrant provision

[default] Running provisioner: shell...
[default] Running: /var/folders/cy/jfbhmrh95bx7q5nqvg6h4qv00000gn/T/vagrant-shell20131023-1280-yxw9sy
stdin: is not a tty
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
git-man liberror-perl libgpm2 libpython2.7 patch vim-runtime

SSH登陆

使用vagrant ssh命令可以登陆到虚拟机上,进行相应的操作,比如:

vagrant@precise64:~$ ls -lah /vagrant/
total 16K
drwxr-xr-x 1 vagrant vagrant 170 Oct 23 07:54 .
drwxr-xr-x 24 root root 4.0K Oct 23 07:19 ..
-rw-r--r-- 1 vagrant vagrant 32 Oct 23 07:54 provision.sh
drwxr-xr-x 1 vagrant vagrant 102 Oct 23 05:51 .vagrant
-rw-r--r-- 1 vagrant vagrant 4.6K Oct 23 07:45 Vagrantfile

关闭实例

关闭实例可以使用三种方式vagrant suspending, vagrant halt, vagrant destroy。

  • suspending,暂停虚拟机,保存虚拟机当前的状态(内存和磁盘均不释放),可以使用vagrant up命令恢复运行;
  • halt,关机,虚拟机停止运行,但是虚拟机实例保留,不销毁,可以理解为是正常的关机;
  • destroy,销毁虚拟机,虚拟机的实例被销毁;

相关资源

官网:http://www.vagrantup.com

文档: http://docs.vagrantup.com/v2/

Box:http://www.vagrantbox.es/

Vagrant入门[转]的更多相关文章

  1. Vagrant入门

    简单地说,Vagrant让我们可以通过代码的方式快速地.可重复地创建针对不同虚拟环境的虚拟机,包括Virtualbox.AWS.Docker等.它使得我们可以一次性地.自动创建多个环境相同的虚拟机,对 ...

  2. [转] Vagrant入门

    [From] https://www.cnblogs.com/davenkin/p/vagrant-virtualbox.html 简单地说,Vagrant让我们可以通过代码的方式快速地.可重复地创建 ...

  3. vagrant 入门

    0.说明 本门所有的操作都是基于mac.windows可做相应调整,大体流程是一样的. 1.什么是vagrant 通俗来讲vagrant是一个通过命令行,来管理虚拟机的工具,vagrant本身并没有提 ...

  4. Vagrant入门二(转)

    原文:https://github.com/zhjchina/Go-best-practice/edit/master/ebook/zh/01.3.md 3 Vgrant使用入门 前面我们已经学会了如 ...

  5. Vagrant入门一(转)

    原文: https://github.com/astaxie/Go-best-practice/blob/master/ebook/zh/01.2.md 1.2 Vagrant安装配置 实际上Vagr ...

  6. Vagrant 入门 - 配置

    原文地址 现在我们已经有了一个运行 Ubuntu 的虚拟机,并且可以在宿主机上编辑文件并自动同步到虚拟机.现在让我们安装一个 web 服务器,通过服务器访问这些文件. 可以通过 SSH 进入并安装一个 ...

  7. Vagrant 入门 - box

    原文地址 Vagrant 使用基础镜像来快速克隆虚拟机,而不是从头开始构建虚拟机.这些基础镜像在 Vagrant 中被称为"box",并且指定用于 Vagrant 环境的 box ...

  8. vagrant 入门3

    创建第一个Vagrant虚拟环境以及工程(续集): (8) Provisioning: 通常情况下Box只做最基本的设置,而不是一次到位的设置好所有的环境.Vagrant通常使用chef或者Puppe ...

  9. vagrant 入门4

    7. 打包 Packaging , 8080 end 2. 打包Project $ vagrant package --vagrantfile Vagrantfile.pkg 8. 打包完成后,在工程 ...

随机推荐

  1. tail-head

    [root@rusky]# tail test3 #不加参数默认显示全部内容 line line2 line3 line4 line5 line6 line7 line8 line9 line10 [ ...

  2. R语言编程艺术# 矩阵(matrix)和数组(array)

    矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...

  3. C#。2.1 运算符

    运算符: 一.算术运算符: + - * / % ——取余运算 取余运算的应用场景: 1.奇偶数的区分. 2.把数变化到某个范围之内.——彩票生成. 3.判断能否整除.——闰年.平年. int a = ...

  4. Ubuntu 添加sudo用户

    第一种方法: 添加sudo用户 当你安装Ubuntu的时候,它会自动添加第一个用户到sudo组,允许这个用户通过键入其自身帐户密 码来获得超级用户(root)身份.然而,系统不会再自动添加其他的用户到 ...

  5. iOS 点击cell下拉

    iOS  点击cell下拉 代码如下: #import "ViewController.h" @interface ViewController ()<UITableView ...

  6. iOS_SN_CoreData(二)

    上一篇是讲怎么进行CoreData的基本操作,这一篇是讲NSFetchedResultsController得到CoreData数据怎么与tableView完美结合,和动画操作的实现. NSFetch ...

  7. n!(n的阶乘)

    我们在这里介绍一些关于n!的性质. 在计数问题中,经常需要用到n!.有必要了解n!在mod p下的一些性质.下面我们假设p是素数,n!=ape(a无法被p整除),并试图求解e和a mod p(把这个东 ...

  8. uva 10994 - Simple Addition

    //组合数学 //计算sum{i从右往左数的第一个非0数字,p<=i<=q}. #include <cstdio> typedef long long ll; ll sum(l ...

  9. HTML5 Canvas基础知识

    HTML5画布 1.创建一个画布         <canvas id="myCanvas" width="200" height="100&q ...

  10. 第四届CCF大数据学术会议征文通知

    第四届CCF大数据学术会议征文通知 2016年10月,兰州 近几年,大数据是各界高度关注积极布局的热点方向.2015年8月,国务院发表<促进大数据发展行动纲要>,正式将大数据提升为国家战略 ...