如何通过一个目录初始化出多个虚拟机

之前每次使用 Vagrant 都是直接 vagrant init 初始化一个 Vagrant VM。

比如:vagrant init ubuntu/trusty64 创建出来的 Vagrantfile 都是这样的:

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
end

然后开机之后就会到某些站点下载 box,完成之后就自动跑起来了。

这个时候,你有没有发现跑起来的虚拟机名称有什么特点?

比如:calamari_default_1448264988063_65272,前面的是文件夹的名称,后面的数字可以理解成唯一标识,中间的 default 是什么意思。

应该就是起来的这个虚拟机的名称,当前文件夹下的 .vagrant/machines 目录下,不是也创建了一个 default 目录么。

还有,vagrant help up 中怎么说的来着:“Usage: vagrant up [options] [name]”。

这个 name 是怎么回事?

所以完全有理由怀疑一个目录下可以跑起来多个虚拟机。

我本来以为是通过创建多个 Vagrantfile 的方式来实现,尝试了创建另一个 Vagrantfile(比如:Vagrantfile_2),然而并没有什么卵用。

谷歌一下,查到了一些信息,一实验,果然有效。

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do | config |
  config.vm.define "x" do | x |
    x.vm.box = "ubuntu/trusty64"
  end
  config.vm.define "y" do | y |
    y.vm.box = "ubuntu/trusty64"
  end
  config.vm.define "z" do | z |
    z.vm.box = "ubuntu/trusty64"
  end
end

这就可以初始化出来三个虚拟机了。

其实官网文档上都有讲,我也是看过一遍的,不过快速浏览一遍之后没有留下深刻的印象罢了。

参考

  • https://docs.vagrantup.com/v2/vagrantfile/tips.html
  • http://www.thisprogrammingthing.com/2015/multiple-vagrant-vms-in-one-vagrantfile/
  • http://virtuallyhyper.com/2014/06/multi-vm-vagrant-setup/