よく使うVagrantfileの設定のまとめ

公開日:2015/03/25 更新日:2015/03/25
よく使うVagrantfileの設定のまとめのサムネイル

はじめに

Vagrantfileで良く使う記述をまとめておきます。

環境と前提

  • ホストマシン:Mac OS X Yosemite
  • 仮想環境ソフトウェア:VirtualBox 4.3.2
  • vagrant:1.7.2

ホストマシンとゲストマシンの共有フォルダの設定

共有フォルダを使いたい場合は以下のようにconfig.vm.synced_folderを記述します。

# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
config.vm.synced_folder ".", "/vagrant", :mount_options => ["dmode=777", "fmode=777"]

上記の場合は、ホストマシン側の共有フォルダのパスを.、すなわちVagrantfileがあるフォルダとなります。仮想マシン側の共有フォルダのパスは/vagrantとなります。また、:mount_optionsによって、ホストマシン側で共有フォルダ上に作成したフォルダおよびファイルの仮想マシン側でのアクセス権を指定しています。 上記の場合は、ホストマシン側で共有フォルダ上に作成したフォルダ、ファイルの仮想マシン側でのアクセス権はすべて777、すなわちフルアクセスになります。ここは各自の状況に合わせて設定すればいいと思います。

仮想マシンに割り当てるメモリ量の設定

以下のようにvb.memoryでメモリ量を指定できます。単位はMBです。

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  config.vm.provider "virtualbox" do |vb|
    # Customize the amount of memory on the VM:
    vb.memory = "2048"
  end

ネットワークの設定

Vagrantfileで指定できるネットワーク設定として以下の5つをメモしておきます。

  • NAT(vagrantのデフォルト)
  • ホストオンリーアダプタ
  • 内部ネットワーク
  • ブリッジアダプター
  • ポートフォワーディング

NAT(vagrantのデフォルト)

Vagrantfileがデフォルトの状態の場合、仮想マシンには以下のように「NAT」アダプターが1つ付加されている状態になります。

NAT.png この状態の仮想マシンのping到達可否は以下表のようにになります。以下の表で「VM」は仮想マシンを指します。

Table1 ping到達可否(NAT)

ネットワーク種別 VM→ホストマシン ホストマシン→VM VM→外部 外部→VM VM同士
NAT
※ 上記表での「外部」とは、ホストマシン以外のマシンを意味します。 ※ 上記表での「VM同士」は、同じネットワーク種別に属する仮想マシン同士の通信です。

ホストオンリーアダプタ

Vagrantfileにconfig.vm.network "private_network"の記述を加えた場合は、仮想マシンに以下のように「ホストオンリーアダプター」がデフォルトの「NAT」アダプターに加えて追加されます。

hostonlyadapter.png 以下に静的IPアドレス、動的IPアドレスの場合の具体的な記述を載せます。

静的IPアドレスを割当

# Create a private network, which allows host-only access to the machine
# using a specific IP.
 config.vm.network "private_network", ip: "192.168.33.11"

DHCPによって動的IPアドレスを割当

下記のように記述することでDHCPによる割り当ても可能です。

# Create a private network, which allows host-only access to the machine
# using a specific IP.
 config.vm.network "private_network", type: "dhcp"

この場合のping到達可否は以下のようになります。

Table2 ping到達可否(NAT+ホストオンリーアダプター)

ネットワーク種別 VM→ホストマシン ホストマシン→VM VM→外部 外部→VM VM同士
ホストオンリー
※ 上記表での「外部」とは、ホストマシン以外のマシンを意味します。 ※ 上記表での「VM同士」は、同じネットワーク種別に属する仮想マシン同士の通信です ※ 赤部分はデフォルト(NAT)のみの場合との差異
PRIVATE NETWORKS | VAGRANT DOCS

内部ネットワーク

Vagrantfileにconfig.vm.network "private_network"virtualbox__intnet:のオプションを指定した場合、仮想マシンに以下のように「内部ネットワーク」アダプターがデフォルトの「NAT」アダプターに加えて追加されます。

internalnet.png

内部ネットワーク名を指定する場合

以下のように記述することで、「mynetwork」という名前の内部ネットワークが作成されます。同じ名前の内部ネットワークに属する仮想マシン同士が通信可能となります。

# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.12", virtualbox__intnet: "mynetwork"

内部ネットワーク名を指定しない場合

なお、以下のように内部ネットワーク名を指定せず、trueを指定した場合は、「intnet」という名前になります。

# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.12", virtualbox__intnet: true

internal-intnet.png

この場合のping到達可否は以下のようになります。

Table3 ping到達可否(NAT+内部ネットワークアダプター)

ネットワーク種別 VM→ホストマシン ホストマシン→VM VM→外部 外部→VM VM同士
内部ネットワーク
※ 上記表での「外部」とは、ホストマシン以外のマシンを意味します ※ 上記表での「VM同士」は、同じネットワーク種別に属する仮想マシン同士の通信です ※ 赤部分はデフォルト(NAT)のみの場合との差異

ブリッジアダプター

Vagrantfileにconfig.vm.network "public_network"の記述を加えた場合、仮想マシンに以下のように「ブリッジアダプター」がデフォルトの「NAT」アダプターに加えて追加されます。

bridge.png 以下に静的IPアドレス、動的IPアドレスの場合の具体的な記述を載せます。

静的IPの割り当て

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  config.vm.network "public_network", ip: "192.168.0.2"

DHCPによってIPアドレスを割当

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  config.vm.network "public_network"

ブリッジするインターフェースの指定

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  config.vm.network "public_network", bridge: 'en1: Wi-Fi (AirPort)'

もし上記のようにブリッジするインターフェースを指定しなかった場合、以下のようにvagrant upの途中で毎回聞かれます。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Available bridged network interfaces:
1) en5: Thunderbolt Ethernet
2) en0: Wi-Fi (AirPort)
3) en1: Thunderbolt 1
4) en2: Thunderbolt 2
5) bridge0
==> default: When choosing an interface, it is usually the one that is
==> default: being used to connect to the internet.
    default: Which interface should the network bridge to?

この場合のping到達可否は以下のようになります。

Table4 ping到達可否(NAT+パブリックネットワークアダプター)

ネットワーク種別 VM→ホストマシン ホストマシン→VM VM→外部 外部→VM VM同士
ブリッジアダプター
※ 上記表での「外部」とは、ホストマシン以外のマシンを意味します ※ 上記表での「VM同士」は、同じネットワーク種別に属する仮想マシン同士の通信です ※ 赤部分はデフォルト(NAT)のみの場合との差異
PUBLIC NETWORKS | VAGRANT DOCS

ポートフォワーディング

Vagrantfileにconfig.vm.network "forwarded_port"の記述を加えた場合、新たにネットワークアダプターは追加されませんが、以下のようにポートフォワーディングのルールが追加されます。

portforwarding2.png 以下の記述によって上の画像と同じようにホストマシンの1235番ポート宛のアクセスが仮想マシンの80番ポートにフォワードされます。

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  config.vm.network "forwarded_port", guest: 80, host: 1235

なお、ポートフォワーディングの場合はping到達可否のNATの場合と同じになります。

トラブルシューティング

vagrantが吐き出すエラーで詳細が不明な場合は、以下のようにvb.gui = trueに記述することで、仮想マシンのGUI画面を表示してくれるのでエラーの詳細を確認でき、原因を推測しやすくなると思います。

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  config.vm.provider "virtualbox" do |vb|
    # Display the VirtualBox GUI when booting the machine
    vb.gui = true # ここを記述

    # Customize the amount of memory on the VM:
    # vb.memory = "2048"
  end

おわりに

Vagrantfileで指定できる設定はまだまだたくさんあるようです。もし上記の内容で間違っている箇所等あったらご指摘頂けると助かります。

関連記事

開発アプリ

nanolog.app

毎日の小さな出来事をなんでも記録して、ログとして残すためのライフログアプリです。