vagrant学习笔记-入门篇

什么是vagrant

Create and configure lightweight, reproducible, and portable development environments. ( from www.vagrantup.com )

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。 ( from vagrant·百度百科 )

vagrant可以为你提供一个轻量级的开发环境,在vb或者vm的协助下,你可以迅速地搭建一个虚拟机来测试程序,vagrant可以让你的工作变得更加高效。(目前和vagrant类似的有一个叫做docker的程序,也提供类似虚拟化的环境,但两者有所差别,后面的文章里会介绍一下docker及其用法。)

为什么要用vagrant

Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team. ( from vagrant·docs )

安装vagrant

vagrant依靠VirtualBox或者VMware,所以在安装vagrant之前,你需要先安装上面两个虚拟机软件中的任一。
然后,在vagrant下载页面下载对应系统的vagrant进行安装。(很简单的样子哈~)
然后打开终端工具(windows下是cmd),执行vagrant命令,如果你看到的不是command not found之类的东西,恭喜你安装成功了。

启动你的第一个vagrant虚拟机

在vagrant中,不同的系统被打包为一个个的“box”,在启动你的虚拟机之前,你需要先下载一个box:

  • ATLAS——这个是vagrant官方运营的一个vagrant box平台,你可以在这里找到你喜欢的box,并记住它的名称(比如 ubuntu/trusty64
  • Vagrantbox.es——由于我们众所周知的原因,访问“局域网”之外资源的速度慢到不能再慢,所以你可以从Vagrantbox.es先将你看中的box下载到本地,然后再使用相关命令添加到你的vagrant环境中(后面会介绍的)。

如果是官方平台的box,你可以使用vagrant box add $YOUR_BOX_NAME命令进行下载。
vagrantbox.es平台下载的box,请使用vagrant box add $YOUR_BOX_ADDRESS --name $YOUR_BOX_NAME命令进行添加(请不要忽略name参数)。

接下来就是见证奇迹的时刻了~

切换到你想初始化vagrant的文件夹,然后执行vagrant init命令,你会发现在目录下多了一个Vagrantfile文件,你可以修改这个文件以改变vagrant项目的各项设置。

请用你喜欢的编辑器打开这个文件,注意一下第15行,config.vm.box = "$YOUR_BOX_NAME",请将你打算启动的box的名称填写在双引号之内。保存后,执行vagrant up命令。你看到了什么?你的虚拟环境已经成功搭建起来了~

是不是迫不及待地想连接到你的虚拟环境了?执行vagrant ssh,是不是看到了你熟悉的界面?尽情地敲击你的键盘,测试你的程序吧~

同步文件

vagrant在虚拟机根目录下提供了一个vagrant文件夹,这个文件夹和你在宿主机(就是你运行vagrant的机器)中初始化vagrant的文件夹(也就是包含Vagrantfile的那个文件夹)是同步的,当你在本地的vagrant文件夹中添加或者删除文件的时候,你的虚拟机中/vagrant文件夹中对应的文件也会发生变更。

执行脚本

你是否希望虚拟机可以执行你指定的脚本文件,而不是一行一行的敲代码去安装一个个的程序,vagrant的“PROVISIONING”机制使你的想法变成现实,你可以通过在Vagrantconfig.vm.provision :shell, path: "$YOUR_FILE_NAME",你设置的执行命令默认只会执行一次,而不是每次开机都会执行。想立刻看看效果?执行vagrant reload --provision命令吧~

网络设置

相信大部分用vagrant测试程序的时候都会在宿主机和虚拟机之间有交互,那么网络设置就是至关重要的一个环节咯~
请打开Vagrantfile,转到25行,有类似这样的一条设置,config.vm.network :forwarded_port, host: 4567, guest: 80,将前方的“#”去掉。host后面的端口号指的是你在宿主机上访问虚拟机时所使用的端口号,guest指的是虚拟机上的端口号,比如上面的设置,那么我如果需要访问虚拟机,那我就需要在我的浏览器里输入localhost:4567,访问的实际上是虚拟机上监听80端口的程序。

挂起 关闭 销毁

当你完成了当前的工作或者想销毁当前虚拟机的时候,你可以执行vagrant halt关闭你的虚拟机,在这种情况下,你的虚拟机会被关闭,和关电脑差不多;你也可以执行vagrant suspend将虚拟机挂起,这个命令会保存你当前的工作状态,当你执行vagrant up恢复虚拟机的时候,你会回到上一次执行挂起命令时的状态,和休眠差不多;当然,你如果不想保留你在虚拟机上“搞的破坏”,你也可以执行vagrant destroy,这条命令会把你的虚拟机“摧毁掉”(我只是在老老实实地翻译英文~),当你下一次执行vagrant up的时候,一个崭新的虚拟机就会呈现在你的面前。


启动虚拟机的时候,error提示:

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=id -u vagrant,gid=getent group vagrant | cut -d: -f3 vagrant /vagrant
mount -t vboxsf -o uid=id -u vagrant,gid=id -g vagrant vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

百度了一下,找到了解决方案
sudo yum install gcc#系统可能默认已经安装, 请自行检查
sudo yum install dkms#安装驱动模块动态加载系统,系统可能默认已经安装, 请自行检查
sudo /etc/init.d/vboxadd setup

然后使用vagrant reload重新加载配置文件即可完美解决~


断断续续的,终于把入门篇的笔记写完了,希望能帮到一些刚刚接触vagrant的朋友,接下来还会有一篇文章把vagrant剩下的进阶设置详细的介绍一下。
欢迎各位大牛的批评指正,也欢迎和我一样的“小白们”一同讨论,共同进步~

标签: vagrant