可以从 Vagrant 源里下载 OS 映像(称作 box)并启动,不需要手动安装,而且使用时不需要打开 VirtualBox 的图形窗口。修改配置也很方便,还可以利用 Provision 机制来增加定制脚本。缺点就是源的速度。
到 官网 下载相应安装包。
Ubuntu 12.04 LTS 32-bit 对应的 box 是 hashicorp/precise64。
mkdir ubuntu
cd ubuntu
vagrant init hashicorp/precise64 # 生成 ./Vagrantfile
vagrant up
vagrant ssh # 退出用 logout
mkdir centos
cd centos
vagrant init # 生成 ./Vagrantfile
到 https://app.vagrantup.com/boxes/search 搜索需要的 box,我需要的是 centos/7
。
修改 ./Vagrantfile
:
config.vm.box = "centos/7"
# 去掉注释即可。这样主机就可以用IP访问虚拟机
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "2048"
end
启动并登入:
vagrant up
vagrant ssh
$ vagrant init # 初始化
$ vagrant up # 启动虚拟机
$ vagrant halt # 关闭虚拟机
$ vagrant reload # 重启虚拟机
$ vagrant ssh # SSH 至虚拟机
$ vagrant status # 查看虚拟机运行状态
$ vagrant destroy # 销毁当前虚拟机
下载 box 到本地,然后解压,待以后使用。
vagrant box add hashicorp/precise64
vagrant suspend # 保存状态
vagrant resume # 恢复
就是一个 Package,将虚拟机映像和一些配置文件打成的一个包,下载到本地后会先解包再存放。
默认是 ~/.vagrant.d/boxes/
,是将 .box
文件解包后存放的。
销毁(destroy)虚拟机后,box 仍然存在,不会被删除。
如果想更换路径:
echo "export VAGRANT_HOME='/path/to/vagrant_home'" >> ~/.bashrc
Private Networks:只能从主机访问,更安全。
Public Network:跟主机在一个网络的机器都可以访问。
Forwarded Ports:端口映射。
虚拟机的 /vagrant
默认映射到当前项目的目录。
$ wget http://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-1710_01.VirtualBox.box
$ vagrant box add centos /your/package.box # 自定义 box name
$ vagrant init centos
在 Vagrantfile 中可以增加一些脚本,在 vagrant up
后执行,达到对系统定制的效果。
# 内嵌脚本
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y apache2
SHELL
# 外部脚本(放在相同目录下)
# config.vm.provision "shell", path: "bootstrap.sh"
执行 vagrant reload --provision
可以重载定制脚本。
静态文件缓存造成的,修改 Apache/Nginx 配置
# Apache
EnableSendfile off
# Nginx
sendfile off;