No.194


【Vagrant】仮想マシンを同時に起動する

ひとつのVagrantfileで仮想マシンを複数起動させたい

 まあ、Vagrantfileを複数用意すればいいとかそういう話もあるけど、せっかくVagrantにはMulti-Machineという概念があるので利用しない手はない。

Vagrant MULTI-MACHINE

 ひとつのリポジトリで、

  • 旧システムの環境と新システムの環境を同時に管理したい
  • WEBサーバとDBサーバを別立てしたい

 などの時に便利なはず。たぶん。


環境別の項目

 環境ごとにconfig.vm.defineブロックを用意して記載すればOK。

Vagrant.configure(2) do |config|
  config.vm.define :環境1 do |instance|
    環境1の設定
  end
  config.vm.define :環境2 do |instance|
    環境2の設定
  end
end

 これでvagrant upすると複数の環境が起動するようになる。

 環境を指定して起動させたい場合はvagrant upに環境名を追加すればOK。

vagrant up 環境1

共通の設定項目

 共通の設定、例えば共有フォルダの設定などはVagrant.configureブロックの直下に記載すればいい。
 boxファイルの共用もOKだ。

Vagrant.configure(2) do |config|
  共通の設定
  config.vm.define :環境1 do |instance|
    環境1の設定
  end
  config.vm.define :環境2 do |instance|
    環境2の設定
  end
end

Primary Machine

 複数の環境を定義する場合、デフォルトの環境を指定することができる。それがPrimary Machineだ。

 記述は簡単。下記のようにデフォルトにしたい環境にprimary: trueをつければよい。下記の例では環境1をデフォルト(プライマリ)にしている。

 プライマリの環境はひとつしか指定できないので注意すること。

Vagrant.configure(2) do |config|
  config.vm.define :環境1, primary: true do |instance|
    環境1の設定
  end
  config.vm.define :環境2 do |instance|
    環境2の設定
  end
end

Autostart Machines

 Vagrantfileに複数の環境を記述した場合、vagrant upすると全ての環境が起動してしまう。

 全部起動させたくない場合は、オプションにautostart: falseを追加すればOK。

Vagrant.configure(2) do |config|
  config.vm.define :環境1, primary: true do |instance|
    環境1の設定
  end
  config.vm.define :環境2, autostart: false do |instance|
    環境2の設定
  end
end

 これでvagrant upしても環境1だけしか起動しなくなる。