Skip to content

Instantly share code, notes, and snippets.

@ericzhong
Last active November 24, 2017 10:04
Show Gist options
  • Save ericzhong/3f65fd63b1a06a742f91a48d97701989 to your computer and use it in GitHub Desktop.
Save ericzhong/3f65fd63b1a06a742f91a48d97701989 to your computer and use it in GitHub Desktop.
Vagrant 安装与使用

为什么

可以从 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

下载 box 到本地,然后解压,待以后使用。

vagrant box add hashicorp/precise64

保存状态

vagrant suspend   # 保存状态
vagrant resume    # 恢复

问题

Box

就是一个 Package,将虚拟机映像和一些配置文件打成的一个包,下载到本地后会先解包再存放。

Box 存放目录

默认是 ~/.vagrant.d/boxes/,是将 .box 文件解包后存放的。

销毁(destroy)虚拟机后,box 仍然存在,不会被删除。

如果想更换路径:

echo "export VAGRANT_HOME='/path/to/vagrant_home'" >> ~/.bashrc

网络类型

Private Networks:只能从主机访问,更安全。

Public Network:跟主机在一个网络的机器都可以访问。

Forwarded Ports:端口映射。

环境变量

Environmental Variables

默认映射目录

虚拟机的 /vagrant 默认映射到当前项目的目录。

手动下载 box

$ 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

定制脚本 (Provision)

在 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 可以重载定制脚本。

Troubleshooting

Apache/Nginx 图片修改后页面刷新仍然是旧文件

静态文件缓存造成的,修改 Apache/Nginx 配置

# Apache
EnableSendfile off

# Nginx
sendfile off;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment