回想以前,想要安装个虚拟机是多么的麻烦。先要费尽心机找到想要的操作系统镜像文件,然后安装虚拟化软件,按照其提供的GUI界面操作一步步创建,整个过程费时费力。但是,自从使用了Vagrant以后,咱腰不酸了,腿不痛了,一口气起5个虚拟机还不费劲。
Vagrant是什么?
这是官网上Vagrant的介绍。
Create and Configure lightweight, reproducible, and portable development environments.
即用来创建和配置轻量级、可重现的、便携式的开发环境。
使用Vagrant可以将创建虚拟机的整个过程自动化起来,并具有高度的重用性。假如你是个开发者,你可以很容易为每个团队成员创建一模一样的开发环境,从根本上防止‘在我的机器上可以工作’之类的bug。假如你是个测试人员,可以一键创建多个一模一样的测试环境并行跑测试,并且跑完测试后还可以一键销毁这些测试环境,达到真正的按需创建。如果你是devops成员,需要和AWS、Chef之类的工具打交道,那么Vagrant是个很好的结合点。你可以通过Vagrant在AWS上直接创建虚拟机,并且自动运行Chef的脚本配置你的新虚拟机。
几个概念
正式介绍Vagrant功能之前先了解一下Vagrant使用的一些概念。
-
Provider - 供应商,在这里指Vagrant调用的虚拟化工具。Vagrant本身并没有能力创建虚拟机,它是调用一些虚拟化工具来创建,如VirtualBox,VMWare,甚至AWS。
-
Box - 可被Vagrant直接使用的虚拟机镜像文件。针对不同的Provider,Box文件的格式是不一样的。
-
Vagrantfile - Vagrant根据Vagrantfile中的配置来创建虚拟机。在Vagrantfile文件中你需要指明使用哪个Box,需要预安装哪些软件,虚拟机的网络配置等。
Vagrant的安装
安装Vagrant非常简单,可以在Downloads页面选择最新的版本安装。Vagrant支持Windows、Linux、Mac等平台。
Box管理
使用Vagrant之前先要给Vagrant添加Box,也就是可供Vagrant使用的虚拟机镜像文件。Vagrant官网本身维护了一些镜像文件,我们可以直接使用。http://www.vagrantbox.es/上面有更多的box可以供我们使用。
1 2 3 4 5 6 |
|
可以看到Box与Provider是相关的,每个Box都必须指定Provier,只有使用对应的Provier才能正确使用Box。
创建并运行虚拟机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
vagrant init precise32
会在当前目录下生成一个Vagrantfie文件,其使用precise32作为box。vagrant up
则是使用virtual box这个provider来初始化并启动precise32这个虚拟机。
我们可以详细的看看Vagrantfile这个文件。
Vagrantfile 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
|
从上述的文件可以看出Vagrantfile可以配置很多东西,比如使用的Box,需要转发的端口,同步指定的目录,使用Chef、puppet等对虚拟机进行预配置等。
如果修改了Vagrantfile中的配置,只需要执行vagrant reload
来应用新配置。
同步目录
虚拟机启动起来以后就可以ssh上去了。
1 2 3 4 5 6 7 8 9 10 11 |
|
Vagrant会自动给虚拟机根目录下创建一个名为vagrant的目录。这个目录可以与主机Vagrantfile所在的目录保持同步。这个同步是相互的,无论改动了主机目录中的文件,还是虚拟机目录中的文件,都可以自动同步到另一方。
1 2 3 4 5 6 7 8 9 |
|
多机器管理
其实Vagrantfile支持配置多台机器,如果你需要设置多台服务器及数据库环境,可以用一个Vagrantfile搞定。
Vagrantfile 1 2 |
|
这个文件配置了两个box,一个叫web,一个叫db。现在启动虚拟机就需要加上虚拟机名了。
1 2 3 4 5 6 7 8 |
|
关闭虚拟机
Vagrant提供了好几种方法来关闭虚拟机,你可以根据不同的情况选择不同的方式。
vagrant suspend
将虚拟机置于休眠状态。这时候主机会保存虚拟机的当前状态。再用vagrant up
启动虚拟机时能够返回之前工作的状态。这种方式优点是休眠和启动速度都很快,只有几秒钟。缺点是需要额外的磁盘空间来存储当前状态。
vagrant halt
则是关机。如果想再次启动还是使用vagrant up
命令,不过需要多花些时间。
vagrant destroy
则会将虚拟机从磁盘中删除。如果想重新创建还是使用vagrant up
命令。
另外1.2以上版本的Vagrant还引用了插件机制。可以通过vagrant plugin
来添加各种各样的plugin,这给Vagrant的应用带来了更大的灵活性和针对性。比如可以添加vagrant-windows
的插件来增加对windows系统的支持,通过添加vagrant-aws
插件来实现给AWS创建虚拟机的功能。你也可以编写自己的插件。由于Vagrant是ruby写的一个gem,其插件的编写也是使用的Ruby语言。这里就不多做介绍了。感兴趣的可以去官网查看。