准备工作
- VirtualBox
- Vagrant
- 下载自己需要的Box 官方提供的范例 precise32
还可以在 http://www.vagrantbox.es/ 这里下载更多不同系统甚至是已经配置好环境直接可以用的box,虽然可以直接在Vagrant直接使用网址,由Vagrant自动下载安装,但是考虑到网络情况,还是建议自行先下载好。
设置环境
安装VirtualBox, Vagrant时环境变量可能不生效, 推荐重启机器...
添加Box
首先在本地创建好工作目录,并在命令行下切换到对应目录 添加box的几种方式
# 网络不好不推荐,一个box 100M+
vagrant box add base http://files.vagrantup.com/precise32.box
# 选择已下载的box或者自己做的box(.box是一个tar文件), 推荐
vagrant box add base precise32.box
# 指定Box名称
vagrant box add precise32 precise32.box
vagrant box add precise32 http://files.vagrantup.com/precise32.box
base 表示指定默认的box,也可以为box指定名称,比如 precise32,使用base时,之后可以直接使用 vagrant init 进行初始化,如果自行指定名称,则初始化的时候需要指定box的名称。
初始化工作目录
# 如果名称是base可以直接运行初始化命令
vagrant init
# 如果指定了名称
vagrant init precise32
完成之后会生成 Vagrantfile
配置文件, Vagrant的精华就在这个文件里面了
网络配置
Vagrant的网络有三种模式
- 较为常用是端口映射,就是将虚拟机中的端口映射到宿主机对应的端口直接使用 ,在Vagrantfile中配置
#guest: 22 表示虚拟机中的22端口, host: 2222 表示映射到宿主机的2222端口
config.vm.network :forwarded_port, guest: 22, host: 2222
- 如果需要自己自由的访问虚拟机,但是别人不需要访问虚拟机,可以使用private_network,并为虚拟机设置IP,在Vagrantfile中配置:
#192.168.1.2 表示虚拟机的IP,多台虚拟机的话需要互相访问的话,设置在相同网段即可
config.vm.network :private_network, ip: "192.168.1.2"
- 如果需要将虚拟机作为当前局域网中的一台计算机(桥接),由局域网进行DHCP,那么在Vagrantfile中配置:
config.vm.network :public_network
目录映射
既然是开发环境,那么开发工作肯定还是需要在本地完成,而不是都要进到虚拟机中去完成,虚拟机就好好在后台运行服务就好了,不然就本末倒置了,所以这里就需要使用目录映射功能,将本地的目录映射到虚拟机的对应目录。
默认情况下,当前的工作目录,会被映射到虚拟机的 /vagrant
目录,当前目录下的文件可以直接在 /vagrant
下进行访问,当然也可以在通过 ln 创建软连接,如
ln -fs /vagrant/wwwroot /var/www
来进行目录映射,当然,从自动化配置的角度,能不进系统就不需要进系统,所以在Vagrant也可以进行目录映射的操作:
config.vm.synced_folder "wwwroot/", "/var/www"
前面的参数 wwwroot/
表示的是本地的路径,这里使用对于工作目录的相对路径,这里也可以使用绝对路径,比如: d:/www/
后面的参数 /var/www
表示虚拟机中对应映射的目录。
运行脚本
虽然不是必须,但是如果有需要在启动时运行一些脚本(环境的安装或者有些服务的启动需要在完成目录映射之后进行),可以编辑脚本,类似如下(摘自Vagrant Document):
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
rm -rf /var/www
ln -fs /vagrant /var/www
保存为sh文件,文件位置随意,但最好是和Vagrantfile相同目录,文件名自取(如 boot.sh),然后在Vagrantfile中添加:
config.vm.provision :shell, :path => "boot.sh"
当初次使用基本的设置都完成则之后,则可以使用 vagrant up
启动虚拟机。
虚拟机启动之后则可以通过 vagrant ssh
联入虚拟机进行进一步的环境配置,或者软件安装相关的工作,在Windows系统下,并不能直接通过 vagrant ssh
连到虚拟机,需要使用 Putty,Xshell 等第三方工具进行连接
连接的IP和端口根据网络环境配置的不同有所不同,如果是默认使用端口映射的话,一般是连接本地的2222端口。可以通过配置修改,前提是主机没有占用22端口
config.vm.network :forwarded_port, guest: 22, host: 22
登录的帐号密码均为 vagrant
,登录之后如果需要 su root
,密码也是 vagrant
注:使用 vagrant ssh
时,会提示可以使用密钥进行登录,如果需要使用putty进行密钥登录的话,需要下载 puttygen 将 ssh 的密钥转换为 ppk 文件才能使用。
在不进入虚拟机的情况下,还可以使用下面的命令对 虚拟机进行管理:
- vagrant up (启动虚拟机)
- vagrant halt (关闭虚拟机——对应就是关机)
- vagrant suspend (暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)
- vagrant resume (恢复虚拟机 —— 与前面的暂停相对应)
- vagrant destroy (删除虚拟机,删除后在当前虚拟机所做进行的除开
Vagrantfile
中的配置都不会保留)
当在启动Vagrant后,对于虚拟机有进行过安装环境相关的配置,如果并不希望写在Vagrant的启动shell里面每次都重新安装配置一遍,可以将当前配置好的虚拟机打包成box,
vagrant package --output NAME --vagrantfile FILE
可选参数:
--output NAME : (可选)设置通过NAME来指定输出的文件名
--vagrantfile FILE:(可选)可以将Vagrantfile直接封进box中
注:如果网络模式中使用 private_network 的话,在打包之前需要清除一下private_network的设置,避免不必要的错误:
sudo rm -f /etc/udev/rule.d/70-persistent-net.rules
制作完成之后直接将box文件拿到其他计算机上配置即可使用。
参考 http://blog.smdcn.net/article/1308.html 并做部分修改