Vagrant 虚拟机管理工具

Vagrant 是一个虚拟机管理工具,非常适合用于搭建开发环境。它提供了一套易用的配置规则,比人工操作或者使用虚拟机软件提供的命令行要方便,且可重复。这里说的虚拟机一般用的是 VirtualBox

Vagrant 与 rvm 等工具不同的是,rvm 管理的是 Ruby 的版本,Vagrant 是管理整个虚拟机。无论开发人员用的是 Windows 还是 Mac,都可以跑一个一致的 Linux 开发环境。所以如果你想快速安装/重置虚拟机,或者给开发组成员部署完全一致的开发环境,Vagrant 就是你需要的。

安装

你需要预先安装 VirtualBox,然后到这个页面下载安装包:

http://downloads.vagrantup.com/

启动

Vagrant 启动非常简单,就两行命令:

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

第一条命令在当前目录下创建了一个名为 Vagrantfile 的配置文件。这条命令指定了 Vagrant 所使用的 box(Vagrant 中打包好的虚拟机文件) 名为 precise64,如果本机没找到这个 box,就到http://files.vagrantup.com/precise64.box 下载所需要的 box。

由于是第一次使用 precise64 这个 box,需要从网络下载完整的虚拟机镜像,这个过程需要十几分钟,下载完成后就可以重用到别的配置文件中。

下载完成后,vagrant up 就可以启动虚拟机。

连接

启动虚拟机后,默认是跑在后台,并且不显示图形界面的,这时候需要用 ssh 连接虚拟机:

$ vagrant ssh

然后就登陆上虚拟机了,跟 VPS 差不多。但是与 VPS 不同的是,Vagrant 默认配置了一个同步目录:

vagrant@precise64:~$ ls /vagrant/

你会看到本机的 Vagrantfile 文件所在目录下的所有内容。同步目录的好处是,你可以在本机上用自己喜欢的开发工具编辑文件,然后在 Vagrant 里面用另一套环境跑,Vagrant 里面安装的软件不污染你的主机。

关闭

Vagrant 有3种关闭方法。

  1. vagrant suspend

将虚拟机挂起,虚拟机内存都保存到硬盘上,下次可以快速恢复。

  1. vagrant halt

将虚拟机关闭,虚拟机内存释放,下次启动要慢一点。

  1. vagrant destroy

将虚拟机删除,所有变更都丢失,下次启动要重新克隆一个 Vagrant box。

无论那种方式关闭,要再启动 Vagrant 都是用 vagrant up 命令。

网络访问

Vagrant 的网络配置支持3种:

  1. Forwarded ports

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

  1. Private networks

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

  1. Public networks

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

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

例子

Vagrant 启动的是完整的虚拟机,并不限定用来做什么,我们可以用这个虚拟机练习配置服务器,跑应用的开发环境……等等,取决于你的需要。

下面举两个例子。

跑 Nginx

新建一个测试目录:

$ mkdir -p ~/workspace/nginx-test
$ cd ~/workspace/nginx-test/

新建配置:

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

由于之前已经下载过 precise64 这个 box,这里不需要再下载,只要克隆过来就行了。启动完成后,登陆 ssh:

$ vagrant ssh

在 Vagrant 虚拟机内,安装 nginx:

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

这时候 nginx 已经装好了,但是发现没办法在主机访问到虚拟机的服务,我们还需要设置端口映射。在本机 Vagrantfile 的配置块中添加一行配置:

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

这行配置把虚拟机的 80 端口映射到本机的 8080 端口,然后重启虚拟机。

vagrant@precise64:~$ exit
$ vagrant reload

打开浏览器,访问 localhost:8080,就会看到 Welcome to nginx! 字样,说明访问虚拟机内的 nginx 成功了。

Rails 开发

先创建一个 Rails 项目(或者你原有的项目):

$ rails new foo
$ cd foo/

创建 Vagrant 配置:

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

跟上一个例子不同,这里使用 Pravate network,修改 Vagrantfile,在配置块中添加这一行:

config.vm.network :private_network, ip: "192.168.33.10"

然后启动:

$ vagrant up

启动完成后,登陆 ssh:

$ vagrant ssh

安装 RVM,Ruby 2.0.0:

vagrant@precise64:~$ sudo apt-get update
vagrant@precise64:~$ sudo apt-get install curl
vagrant@precise64:~$ curl -L https://get.rvm.io | bash -s stable
vagrant@precise64:~$ source ~/.bash_profile
vagrant@precise64:~$ rvm install 2.0.0

进入 Vagrant 默认同步目录并启动 rails 开发服务器:

vagrant@precise64:~$ cd /vagrant/
vagrant@precise64:/vagrant/$ bundle
vagrant@precise64:/vagrant/$ sudo apt-get install nodejs
vagrant@precise64:/vagrant/$ rails s

浏览器打开 http://192.168.33.10:3000/,会看到 Rails 项目的首页。在本机用喜爱的编辑器或 IDE 开发项目,文件会即时同步到 Vagrant 的虚拟机内,就像在本机启动的一样。

Vagrantfile 可以提交到版本控制里面一并管理。

其他

Vagrant 还有一些值得留意的特性,这里简单介绍:

设置初始化安装脚本,把 Nginx,RVM,MySQL 这些包的安装过程写成脚本,第一次 vagrant up 的时候执行,这样新来的开发成员就不用重复操作。

Vagrant 官方只提供了 Ubuntu LTS 的 box,需要打包 CentOS,OpenSUSE 之类的 box 可以自己动手。

所以,如果你希望能快速安装/重置虚拟机来做服务器测试,或者正为团队成员搭建开发环境而困扰,那么赶紧使用 Vagrant。

(完)
comments powered by Disqus
Powered by GitHub  &&  Jekyll | CC BY-NC-SA