如何用Vagrant运行几个盒子?

时间:2014-05-27 11:35:25

标签: vagrant

我需要用Vagrant运行几个盒子。

有办法吗?

这些不以任何方式相互关联,它们可以被认为是用于测试的不同环境,因此似乎多机器设置与此无关。

8 个答案:

答案 0 :(得分:40)

最好的方法是使用array of hashes。您可以将数组定义为:

servers=[
  {
    :hostname => "web",
    :ip => "192.168.100.10",
    :box => "saucy",
    :ram => 1024,
    :cpu => 2
  },
  {
    :hostname => "db",
    :ip => "192.168.100.11",
    :box => "saucy",
    :ram => 2048,
    :cpu => 4
  }
]

然后,您只需迭代服务器阵列中的每个项目并定义配置:

Vagrant.configure(2) do |config|
    servers.each do |machine|
        config.vm.define machine[:hostname] do |node|
            node.vm.box = machine[:box]
            node.vm.hostname = machine[:hostname]
            node.vm.network "private_network", ip: machine[:ip]
            node.vm.provider "virtualbox" do |vb|
                vb.customize ["modifyvm", :id, "--memory", machine[:ram]]
            end
        end
    end
end

答案 1 :(得分:31)

你可以同时运行多个Vagrant盒子,只要它们的配置不会以某种方式相互冲突,例如:映射主机上的相同网络端口,或在同一提供程序中使用相同的框名称/ ID。手动在提供程序上运行多个框,比如VirtualBox上的多个框,或者让Vagrant注册和启动它们没有区别。结果是一样的,Vagrant只是简化了流程。

您可以使用所谓的multi-machine environment在一个项目/ Vagrantfile中一起管理这些框。它们不一定必须以某种方式连接,易于管理可能是单独的原因,例如,如果你需要在同一时间启动它们。

或者您可以使用单独的项目/ Vagrantfiles并从各自的目录管理机器,完全分开。

如果运行同一项目的多个实例,则需要项目目录的多个副本,因为Vagrant将框状态存储在项目下的.vagrant目录中。

答案 2 :(得分:20)

您只需将保存Vagrantfile的目录复制到新位置,然后从中运行vagrant up

确保在第一次启动框之前复制dir,否则Vagrant会认为这两个位置指的是同一个框。或者,如果您在复制目录之前已经vagrant up,则在复制后删除copied_directory/.vagrant

答案 3 :(得分:13)

您甚至可以在同一目录中为不同的计算机配置或框

使用不同的Vagrantfile
VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_64 VAGRANT_DOTFILE_PATH=.vagrant_ub140464 vagrant up

OR

VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_32 VAGRANT_DOTFILE_PATH=.vagrant_ub140432 vagrant up

Vagrantfile都可以驻留在同一目录

答案 4 :(得分:2)

https://www.vagrantup.com/docs/vagrantfile/tips.html#loop-over-vm-definitions

(1..3).each do |i|
  config.vm.define "node-#{i}" do |node|
    node.vm.provision "shell",
      inline: "echo hello from node #{i}"
  end
end

答案 5 :(得分:1)

我能够拥有一个vagrantfile:

Vagrant.configure("2") do |winconfig|
 # stuff
end

Vagrant.configure("2") do |nixconfig|
 # stuff
end

Vagrant.configure("2") do |macconfig|
 # stuff
end

然后我可以用vagrant up --parallel来提升它们。正如其他人所提到的,不同的流浪文件可能更适合于可维护性。

答案 6 :(得分:0)

如果计算机没有合作,那么将包含Vagrantfile的目录复制到新位置并启动新计算机是最直接的方法。

但是,您可能想要复制/粘贴配置脚本以用于VCS跟踪/回溯目的。将所有脚本保存在一个文件夹中,例如dev,并将Vagrantfile放在dev下的编号文件夹下,例如。 dev/10。当您创建较新的版本时,例如。 dev/11并且不需要旧版本,您可以删除它。并使用相对路径参考通用配置脚本:

config.vm.provision "shell", path: "../provisioner.sh"

答案 7 :(得分:-2)

请注意,并非每个平台都支持并行配置多台计算机。有一些错误导致团队放弃了Virtualbox和VMWare Workstation iirc中的并行配置。