Edited at

Vagrant 事始め 05 - 共有フォルダを設定する

ローカルマシンと仮想マシン間でファイルを便利にやりとりするために、共有フォルダの設定をします。


プラグインの確認をする

まずは共有フォルダを利用するのに必要なプラグインが、Vagrant に設定されているかを確認します。

> vagrant plugin list

vagrant-vbguest (0.15.1)

上記の vagrant-vbguest がない場合は、

> vagrant plugin install vagrant-vbguest

Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Fetching: micromachine-2.0.0.gem (100%)
Fetching: vagrant-vbguest-0.15.1.gem (100%)
Installed the plugin 'vagrant-vbguest (0.15.1)'!

とコマンドを実行して、vagrant-vbguest をインストールします。インストールが完了したら、ふたたび vagrant plugin list を実行して、プラグインがあることを確認します。

そして、vbguest の状態を確認します。

> vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
> vagrant vbguest --status
[default] GuestAdditions 5.2.6 running --- OK.

もし、vagrant vbguest --status コマンドの結果が

> vagrant vbguest --status

[default] No installation found.

と表示された場合、vbguest を利用するのに必要なパッケージをインストールします。

> vagrant vbguest

必要なパッケージのインストールが始まるので、しばし待ちます。


共有フォルダの設定

共有フォルダの設定は Vagrantfile に記述します。


Vagrantfile

Vagrant.configure("2") do |config|

config.vm.box = "centos/7"
config.vm.network "private_network", ip: "192.168.33.10"
# ローカルマシンの Vagrantfile があるディレクトリ内の data フォルダと
# 仮想マシン内の /vagrant_data ディレクトリを共有する
# config.vm.synced_folder {host_path}, {guest_path}, option...
config.vm.synced_folder "./data", "/vagrant_data"
end

オプション名


説明

create
booleam
true/false
初期値は false
true が指定されると、指定されたディレクトリが存在しない場合にディレクトリを作成する

disabled
boolean
true/false
true を指定するとディレクトリの共有を停止する

group
string
-
ディレクトリの所有グループを指定する
初期値は SSH ユーザーが所属するグループ

mount_options
array
-
初期値は空配列
mount コマンドのオプションを指定

owner
string
-
初期値は SSH ユーザー
ディレクトリの所有者を指定

type
string
指定なし(virtualbox)/nfs/rsync/smb
初期値はvirtualbox
nfs などローカルマシンの OS によっては利用できない

id
string
-
mount ポイントの名称を指定
デフォルトはディレクトリパスのスラッシュをアンダーバーに変換した名称

ファイルの読み書きが頻繁に発生しない、ファイルの変更の反映速度をシビアに求めない、巨大なサイズのファイルを共有する場合は、共有する type は virtualbox で指定するのが無難です。

(巨大なファイルを rsync で共有する場合、起動に時間がかかるようになります)


Windows で NFS の共有をする

Windows の場合、共有フォルダのタイプで NFS が指定できません……が、vagrant-winnfsd というプラグインを追加することで対応できます。

> vagrant plugin install vagrant-winnfsd

Installing the 'vagrant-winnfsd' plugin. This can take a few minutes...
Fetching: vagrant-winnfsd-1.4.0.gem (100%)
Installed the plugin 'vagrant-winnfsd (1.4.0)'!


Vagrantfile

  # 共有フォルダのタイプを nfs にする場合、owner と group は指定できないので注意

# 次のようにエラーが出る
# * Shared folders that have NFS enabled do not support owner/group
config.vm.synced_folder "./data/mysql", "/var/lib/mysql", type: "nfs", nfs_export: true, nfs_version: 3


共有フォルダの設定例


virtualbox


Vagrantfile

  # Windows で絶対パスで指定するときバックスラッシュはエスケープする必要がある

config.vm.synced_folder "C:\\Vagrant\\centos7\\public_html", "/vagrant_data", owner: "vagrant", group: "www", type: "virtualbox"


nfs


Vagrantfile

  config.vm.synced_folder "./data", "/vagrant_data", type: "nfs", nfs_export: true, nfs_version: 3



rsync


Vagrantfile

  config.vm.synced_folder "./data", "/vagrant_data", type: "rsync", rsync__exclude: [".git/"]



smb


Vagrantfile

  # Windows で利用する場合は PowerShell v3 以上が必須

config.vm.synced_folder "./data", "/vagrant_data", type: "smb", smb_host: "192.168.0.15", smb_password: hogehoge, smb_username: "fugafuga"