如何用Vagrant运行几个盒子?

tim*_*urb 41 vagrant

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

有没有办法做到这一点?

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

小智 45

最好的方法是使用哈希数组.您可以将数组定义为:

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
  }
]
Run Code Online (Sandbox Code Playgroud)

然后你只需迭代服务器数组中的每个项目并定义配置:

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
Run Code Online (Sandbox Code Playgroud)


fam*_*kin 32

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

您可以使用所谓的多机环境在一个项目/ Vagrantfile中一起管理这些框.它们不一定必须以某种方式连接,易于管理可能是唯一的原因,例如,如果您需要同时启动它们.

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

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

  • 只是为了进一步说明:有没有办法从单个Vagrant文​​件运行几个独立的Vagrant环境而不复制它,或者建议每个环境有一个Vagrantfile吗? (4认同)
  • @erthad啊,我明白了,现在这个问题更有意义了:)是的,在这种情况下你需要同一个项目的多个副本,因为Vagrant将盒子状态存储在项目下的`.vagrant`目录中.添加答案. (2认同)

tim*_*urb 20

您只需将保存Vagrantfile到新位置的目录复制并vagrant up从中运行即可.

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

  • 伟大的东西,是的,如果已经创建,删除目录`.vagrant /`是关键 (4认同)

dee*_*ive 13

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

VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_64 VAGRANT_DOTFILE_PATH=.vagrant_ub140464 vagrant up
Run Code Online (Sandbox Code Playgroud)

要么

VAGRANT_VAGRANTFILE=Vagrantfile.ubntu_1404_32 VAGRANT_DOTFILE_PATH=.vagrant_ub140432 vagrant up
Run Code Online (Sandbox Code Playgroud)

Vagrantfile都可以驻留在同一目录中


Zac*_*ick 5

我能够拥有一个 vagrantfile:

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

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

Vagrant.configure("2") do |macconfig|
 # stuff
end
Run Code Online (Sandbox Code Playgroud)

然后我可以把它们提出来vagrant up --parallel。正如其他人提到的,不同的流浪文件可能更有利于可维护性。