よく使う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つ付加されている状態になります。
この状態の仮想マシンのping到達可否は以下表のようにになります。以下の表で「VM」は仮想マシンを指します。
Table1 ping到達可否(NAT)
ネットワーク種別 | VM→ホストマシン | ホストマシン→VM | VM→外部 | 外部→VM | VM同士 |
---|---|---|---|---|---|
NAT | ◯ | ☓ | ◯ | ☓ | ☓ |
ホストオンリーアダプタ
Vagrantfileにconfig.vm.network "private_network"
の記述を加えた場合は、仮想マシンに以下のように「ホストオンリーアダプター」がデフォルトの「NAT」アダプターに加えて追加されます。
以下に静的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同士 |
---|---|---|---|---|---|
ホストオンリー | ◯ | ◯ | ◯ | ☓ | ☓ |
PRIVATE NETWORKS | VAGRANT DOCS
内部ネットワーク
Vagrantfileにconfig.vm.network "private_network"
とvirtualbox__intnet:
のオプションを指定した場合、仮想マシンに以下のように「内部ネットワーク」アダプターがデフォルトの「NAT」アダプターに加えて追加されます。
内部ネットワーク名を指定する場合
以下のように記述することで、「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
この場合のping到達可否は以下のようになります。
Table3 ping到達可否(NAT+内部ネットワークアダプター)
ネットワーク種別 | VM→ホストマシン | ホストマシン→VM | VM→外部 | 外部→VM | VM同士 |
---|---|---|---|---|---|
内部ネットワーク | ◯ | ☓ | ◯ | ☓ | ◯ |
ブリッジアダプター
Vagrantfileにconfig.vm.network "public_network"
の記述を加えた場合、仮想マシンに以下のように「ブリッジアダプター」がデフォルトの「NAT」アダプターに加えて追加されます。
以下に静的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同士 |
---|---|---|---|---|---|
ブリッジアダプター | ◯ | ◯ | ◯ | ◯ | ◯ |
PUBLIC NETWORKS | VAGRANT DOCS
ポートフォワーディング
Vagrantfileにconfig.vm.network "forwarded_port"
の記述を加えた場合、新たにネットワークアダプターは追加されませんが、以下のようにポートフォワーディングのルールが追加されます。
以下の記述によって上の画像と同じようにホストマシンの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で指定できる設定はまだまだたくさんあるようです。もし上記の内容で間違っている箇所等あったらご指摘頂けると助かります。
関連記事
- 公開日:2020/01/22 更新日:2020/01/22
Vagrant upしたら「VirtualBox is complaining that the kernel module is not loaded.」が出る時の対処方法
Ubuntu18.04上でVagrantの仮想マシンを起動しようとしたところ、<code>VirtualBox is complaining that the kernel module is not loaded.</code>というエラーが出ました。この記事ではこの解決策をまとめます。
- 公開日:2019/04/26 更新日:2019/04/26
Ubuntu上のVagrantの仮想マシンがVBOX_E_INVALID_VM_STATEで起動できない場合の対処方法
Ubuntu18.04上でVagrantの仮想マシンを起動しようとしたところ、VBOX_E_INVALID_VM_STATE (0x80bb0002)というエラーが出て起動できなくなってしまいました。調べてみるとコマンド1つで簡単に解決できました。この記事でその時の症状と解決策についてメモします。
- 公開日:2018/05/24 更新日:2018/05/24
ローカルでのWordPress環境構築にはVagrantのVCCWがお手軽で早くてとても便利
これまでは、例えばMacの場合は使用してローカル環境にWordPressを構築しいじっていました。しかし、WordPressのインストールは毎回ほとんど同じ作業で面倒に感じていました。 調べたところ、vagrantのboxとしてWordPressをインストール済でそのほか諸々の環境も綺麗に構築済のboxを見つけました。それがvccwです。これを使うとvagrant upするだけでWordPressが動く仮想マシンができあがります。
- 公開日:2015/03/20 更新日:2015/03/20
vagrantを使った仮想マシンの作成手順
これまではVirtualBoxやVMWare上でisoファイルを指定し、設定項目入力して〜のような作業を行って仮想マシンを作成していましたが、vagrantを使うとこれらの作業をコマンド1つで完了することができ、だいぶ楽になると思います。vagrantで仮想マシンを作成する手順をメモしておきます。