Vagrantで複数台同時起動するマルチマシン設定

投稿者 : OSCA

[PR] "出川哲朗の充電させてもらえませんか?"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

本稿では、Vagrant に仮想マシン複数台を定義するマルチマシン(Malti-Machine)設定について解説します。

マルチマシン設定とは?

マルチマシン設定とは、一つの Vagrantfile に複数のゲストマシンを定義する設定です。

例えばWEBサーバーとDBサーバーの両方を同時に起動する必要がある場合や、クライアントとサーバーの関係のマシンを起動する必要がある場合などに、マルチマシン設定が役立ちます。

設定

複数台分のマシンの設定を同一の Vagrantfile に config.vm.define を利用して定義します。 サーバーを2台定義する最低限の設定は次のようなイメージです。 ここでは例として Box として precise32 を指定して2台を定義します。

Vagrant.configure("2") do |config|
  config.vm.box = "precise32"
  config.vm.box_url = "http://files.vagrantup.com/precise32.box"

  config.vm.define "server1" do |server|
  end

  config.vm.define "server2" do |server|
  end
end

この二台のマシンにネットワークの設定(IPアドレスの指定)をすると次のようになります。

Vagrant.configure("2") do |config|
  config.vm.box = "precise32"
  config.vm.box_url = "http://files.vagrantup.com/precise32.box"

  config.vm.define "server1" do |server|
    server.vm.network "private_network", ip: "192.168.33.10"
  end

  config.vm.define "server2" do |server|
    server.vm.network "private_network", ip: "192.168.33.11"
  end
end

それぞれのマシンで違う Box を利用する場合は、次のようにします。

Vagrant.configure("2") do |config|
  config.vm.define "server1" do |server|
    server.vm.box = "centOS65"
    server.vm.network "private_network", ip: "192.168.33.10"
  end

  config.vm.define "server2" do |server|
    server.vm.box = "centOS70"
    server.vm.network "private_network", ip: "192.168.33.11"
  end
end

起動

マルチマシン設定でもゲストマシンの起動方法は代わりません。 vagrant up コマンドで起動します、すると定義した台数全てのマシンが起動します。

$ vagrant up
Bringing machine 'server1' up with 'virtualbox' provider...
Bringing machine 'server2' up with 'virtualbox' provider...
...

もし定義した1つのマシンだけを起動したい場合は、vagrant up コマンドに起動したいマシン名を引数で渡してあげます。

$ vagrant up server2

また、起動するマシンを正規表現で指定することもできます。 例えばもっと多くのマシンを定義したとします。 (例: WEB1, WEB2, WEB3, DB1, DB2) 定義したマシンの中で DB サーバーだけ起動したい場合に正規表現で起動することができます。

$ vagrant up /db[0-9]/

SSHログイン

起動したマシンに vagrant ssh コマンドでログインする場合は、ログインする対象のマシン名を指定します。

$ vagrant ssh server2

おわりに

本稿では、Vagrant のマルチマシン設定について解説しました。 複数台のマシンを起動するのでホストマシンに潤沢にメモリが必要となるかもしれませんが、それでもとても有用な機能ですので積極的に利用したいものです。

Vagrant入門へ戻る

Vagrantのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca