Vagrant 初探

什么是 Vagrant?

简单来说,Vagrant 就是一个虚拟机的管理工具,运行在全平台上,主要用 Ruby 语言开发,只有命令行,没有 GUI。下面是 Vagrant 的在操作系统中的原理图:

Image

为什么要使用 Vagrant?

为什么我要使用 Vagrant?假如我要虚拟一个操作系统,直接用虚拟机不就完了吗?

从个人的角度上,你完全可以使用图形化的虚拟机完成你想要的任何操作,你也可以把操作好的虚拟环境文件传给你其他的小伙伴。

但对一个开发团队来说,传统的虚拟机软件体积庞大,图形化管理,配置蛋疼。假如由于某些需求,或者团队成员之间开发沟通成本比较大的时候,统一团队系统环境比较蛋疼。可以说,Vagrant 的主要功能就是,给那些需要统一各队员本地软件运行环境的团队使用的。其次就是模拟一些拥有部署环境的虚拟服务器,类似 AWS,国内很少用到这点。

Vagrant有以下特点:

  • configure(可配置)
  • reproducible(可重置)
  • portable(非常轻便)

下面的 demo 流程基本上就能提现出上面三点。

怎么使用 Vagrant?

使用 Vagrant 必须要基于某种虚拟机,virtual box 是 vagrant 官网推荐免费的非常轻巧的虚拟机。如需要其他的高大上的虚拟机,可以参考这里进行购买。下面我们使用 Vagrant,基于 OS X 安装。

Step1(下载)

这里下载 virtual box 并安装。
这里下载 Vagrant 并安装。
下一个 ubuntu 镜像的.box文件。(其他镜像到这里下载)
好,这么就可以开始了。

STEP2(配置和初始)

在你下载的 ubuntu 镜像目录下将这个.box文件添加到 vagrant 的 box 管理列表,并随便取一个名字。

$ vagrant box add ~/precise64.box --name lol
$ vagrant box list
lol  (virtualbox, 0)

在你平时搞 project 的地方创建一个管理 vagrant demo 的文档,创建一个 demo1,然后用 init 创建刚刚加的 lol box。

$ cd ~/Project && mkdir vagrant && cd vagrant && mkdir demo1 && cd demo1
$ vagrant init lol

这时候你会看到 vagrant 会生成一个配置文件 Vagrantfile,可以打开进去读读里面的配置信息。
然后启动吧。

$ vagrant up

这时候会初始化一些东西,然后后台就会开启一个相对于当前文档的 ubuntu 虚拟机,可以进去查看一下。

$ vagrant global-status
id       name    provider   state    directory
220609b  default virtualbox running  /Users/FTAndy/Project/vagrant/demo5

$ vagrant ssh

...

vagrant@precise64:~$

STEP3(做些什么)

进入了虚拟机之后就可以配置你想要的环境了,可以安装一个 nginx 玩玩。

vagrant@precise64:~$ sudo apt-get update
vagrant@precise64:~$ sudo apt-get install nginx

在外面的 Vagrantfile 上设置 forwarded_port,将 guest 的80映射到 host 的8080。退出虚拟机之后 reload 一下配置。

config.vm.network :forwarded_port, guest: 80, host: 8080

vagrant@precise64:~$ exit

$ vagrant reload

OK。访问一下本地的8080端口吧。“Welcome to nginx!”

最后,可以把你做的东西打包起来,拿到.box文件,传给别人用。

$ vagrant package

然后会生成一个 package.box 文件,给你的小伙伴用吧。

其它

1.销毁

可以通过三种方式挂起活着关闭后台的vagrant程序:

  • vagrant suspend(挂起,把虚拟机内存存到硬盘里,恢复快)
  • vagrant halt(关闭,内存完全释放,纪录操作信息,恢复慢)
  • vagrant destroy(销毁,把内存销毁,不会有任何记录,无法恢复)

2.同步文件

默认会同步所有在 Vagrantfile 下的文档和文件到根目录的 /vagrant下,在外面编辑同时会同步到虚拟机里面。

3.外网映射机制

Vagrant 的网络配置支持3种:

将虚拟机的某个端口绑定到本机端口。

分配给虚拟机一个私有 ip,这样可以在本机上访问虚拟机的所有端口。

让虚拟机暴露在真实的网络中,跟本机同等。

用来开发的话,Forwarded ports 和 Private networks 就够了,如果要开放的端口比较多并且要用 rsync 这样的工具的话,Private networks 更方便。如果要给内网部署 Gitlab 这样的工具给团队使用,则使用 Public networks。

4.常用命令

$ vagrant box add ~/xxx.box --name "your_box_name"

$ vagrant box list

$ vagrant init "your local box or online box"

$ vagrant up —provider=virtural_box

$ vagrant global-status

$ vagrant status

$ vagrant reload

$ vagrant package

$ vagrant halt

$ vagrant suspend

$ vagrant destroy

参考资料

  1. http://segmentfault.com/a/1190000000264347
  2. http://chloerei.com/2013/11/01/vagrant/
  3. https://www.vagrantup.com/
  4. https://github.com/mitchellh/vagrant
  5. https://www.vagrantup.com/