Vagrant 可以让我们用命令直接从云上下载虚拟机的镜像,你想要什么系统都行,Centos,Ubuntu … 只需要一行命令,然后再用命令去操作虚拟机,启动,暂停,关闭,重启,你可以更方便的管理所有的在本地上电脑上的虚拟机镜像,手工去配置它们,可以再重新打包成新的镜像,方便你跟你的团队在其它的项目上重复使用。

安装 Vagrant

Vagrant 提供了一个虚拟机的管理层,虚拟机本身还是需要用到虚拟机的软件,比如 VMware,Virtualbox 等等,推荐用 Virtualbox 。使用系统的包管理工具去安装软件。

Mac 上安装 Vagrant

1
brew install vagrant

Mac 上安装 Virtualbox

1
brew install Caskroom/cask/virtualbox

Box

Box ,你可以把它想成是一个箱子,里面装了一些东西。在用 Vagrant 创建虚拟机的时候,需要用到 Box ,它里面会包装操作系统的镜像,不同的 Box 带的操作系统可能是不一样的,比如 CentOS,Ubuntu 等等,你可以基于它们去创建自己版本的 Box,比如在虚拟机上安装一些软件,然后把它重新打包成 Box 。

在 Vagrant 提供的云服务(https://vagrantcloud.com/)上面可以下载到别人做好的 Box,这个云服务现在叫 Atlas,是 hashicorp 公司的一个产品,Vagrant 也是这家公司的项目。打开这个地址以后,可以去搜索想要用的 Box,可以搜索操作系统的名字,也可以搜索特定的软件的名字,比如 Laravel,Drupal … 在搜索结果上面会显示这个 Box 的下载的次数,你可以用来判断这个 Box 是否受欢迎。

我们需要一个纯净的 Box,就是只包含操作系统,在系统上没有安装其它的多余的东西。注意不同发行版的 Linux 操作起来是有些区别的,我推荐先用一下 CentOS 这款操作系统。

添加 Box

你要把 Box 下载到本地的电脑上,交给 Vagrant 去管理,这样在创建虚拟机的时候,Vagrant 会复制一份你指定的 Box 到你的项目里面,这样你在这个虚拟机上的操作,就不会影响到其它的项目。先确定你用的电脑上的操作系统的位数,现在一般都是 64 位的操作系统。打开命令行工具以后,执行 vagrant box add 命令去添加 Box 。

1
vagrant box add 名字

如果你指定的 Box 在本地电脑上不存在,Vagrant 就会到它的云上去给你下载。执行:

1
vagrant box add chef/centos-6.5

上面的 chef/centos-6.5 还有 centos-6.5-i386 就是想要添加的 Box 的名字,最前面的 chef ,是一个命名空间,一般就是这个 Box 的作者的名字,后面的 centos-6.5 表示这个 Box 的操作系统是 CentOS ,版本是 6.5 ,i386 表示 32 位的系统。

查看本地上的 Box 列表

完成以后,可以查看一下在本地上的 Box 列表。

1
vagrant box list

手工下载并添加 Box 的方法

在执行 Vagrant box add 添加 Box 的时候,Vagrant 会在命令行上显示 Box 的下载地址,下载的速度还有进度,如果你在国内,很可能下载的速度非常慢。你可以复制 Box 的下载地址,然后用下载工具,比如用迅雷去下载。

完成以后,找到下载下来的文件,文件名里会包含 .box 这个扩展名,如果不是,你需要手工添加这个扩展名。并且重命名一下文件,比如命名为 centos_6.5.box 。然后把它放到桌面上,其它地方也行。打开命令行,进入到手工下面的 Box 文件所在的位置。比如

1
cd ~/ityike

然后查看一下文件列表:

1
ls

确定 Box 文件在当前的目录的下面,再执行 vagrant box add 命令去手工添加 Box 。

1
vagrant box add 名称 路径

名称就是你想给这个 Box 起的名字,以后我们会用到这个名字去管理这个 Box,路径是 Box 文件所在的位置,如果你要添加的 Box 直接在你当前所在的目录的下面,可以直接使用 Box 文件的名称,像这样:

1
vagrant box add centos-6.5 centos-6.5.box

Vagrant 会把 Box 文件复制到系统的某个特定的目录的下面,完成以后,你就可以把桌面上的 Box 文件删除掉了。

1
rm centos-6.5.box

再查看一下可用的 Box 列表:

1
vagrant box list

在返回的列表里,你应该可以找到自己手工添加的 centos-6.5 这个 Box 。

管理 Box

添加到本地电脑上的 Box 会放到一个特定的目录的下面。跟 Box 相关的命令,可以用 vagrant box 命令查看。使用的方法就是 vagrant box 后面再加上子相应的子命令,接着是对应的参数。常用的就是 add ,list 还有 remove。add 是添加新的 Box ,list 可以查看已有的 Box ,remove 就是从系统中删除掉 Box 。注意在创建虚拟机的时候,Vagrant 会把你指定的 Box 复制一份放到特定的目录的下面。所以,你在使用 remove 命令删除掉添加到系统中的 Box 的时候,不会影响到这些已有的虚拟机。

创建虚拟机

添加了 Box 以后,我们就可以用 Vagrant 基于这个 Box 去创建虚拟机了。先找个地方去创建一个目录,这个目录就是你的项目所在的目录,它会自动跟虚拟机上的某个目录同步,也就是在你电脑上的这个目录里面的文件,你同样可以在虚拟机里的某个目录里面找到。比如我要在桌面上创建一个叫 ninghao-project 的目录,然后再进入到这个目录,在命令行工具下面执行:

1
2
3
cd ~/ityike
mkdir ityike-project
cd ityike-project

初始化

首先要做的就是初始化一下,用 vagrant init ,后面指定一下要使用的 Box 的名字。完成以后,在你的目录下面创建一个叫 Vagrantfile 的文件。

先查看一下可用的 Box

1
vagrant box list

如果跟着我的步骤来,你应该可以看到一个叫 centos-6.5 的 Box 。下面我们用这个 Box 去初始化一下项目。

1
vagrant init centos-6.5

完成以后,查看一下当前目录下面的东西。

1
ls

你会看到一个 Vagrantfile 文件,这个文件是配置当前项目的虚拟机用的,以后我们会再回来看一下怎么样使用这个文件。

启动虚拟机

Vagrant 提供了一些命令可以操作虚拟机,比如启动,暂停,关闭或者销毁虚拟机。启动虚拟机,执行:

1
vagrant up

第一次启动,花的时间会长一些,因为 Vagrant 会把你为项目指定的 Box 复制到一个地方,然后再去启动它。完成以后,你可以用命令再查看一下虚拟机的状态:

1
vagrant status

如果返回的是 running ,说明虚拟机启动成功,现在你就可以使用 ssh 连接到虚拟机,去控制它了。

控制虚拟机

想在 Linux 系统的虚拟机上进行操作,你要用 ssh 连接到虚拟机,这跟你远程控制 Linux 的服务器是一样的。

Mac

1
vagrant ssh

暂停与恢复

虚拟机在运行的时候会消耗你的电脑资源,比如内存,CPU 等等,在不用它的时候,可以关掉或者使用暂停,暂停虚拟机可以保存虚拟机运行时候的状态,暂停以后,除了占点硬盘空间以外,就不会消耗你的其它资源了。

进入到项目所在的目录,然后可以用 vagrant status 查看一下当前的虚拟机的状态,如果是 running ,你就可以使用命令去暂停一下:

1
vagrant suspend

重新恢复起动,执行命令:

1
vagrant resume

想要彻底关掉虚拟机的运行,执行:

1
vagrant halt

停止以后,要想再起动虚拟机,要执行:

1
vagrant up

删除虚拟机

不打算再用的虚拟机,可以把它删除掉,直接删除项目的目录是不行的,因为为项目指定的虚拟机并不包含在这个项目的目录下面,需要使用命令去删除虚拟机。进入到项目所在目录,然后执行:

1
vagrant destroy

配置共享目录

打开 Vagrantfile ,搜索一下共享目录的配置:

1
# config.vm.synced_folder

去掉这行代码前面的 # 符号 。这个配置后面有两个参数,第一个参数是主机上的目录,可以使用绝对的位置,也可以使用相对的位置,如果是相对位置,是相对于项目根目录的位置,也就是相对于 Vagrantfile 这个文件所在的目录的位置。两个参数之间是一个逗号,第二个参数是在虚拟机上的目录,如果你设置的目录在虚拟机上不存在,Vagrant 在启动虚拟机的时候,会自动去创建这个目录。
比如:

1
config.vm.synced_folder "app", "/vagrant"

端口转发

然后搜索:

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

去掉这行代码最前面的 # 号, 这个配置就是端口转发