Vagrant | synced_folder でホストOSとゲストOSの任意のフォルダを同期する
概要
Vagrantでは synced_folder を利用することによって、
ホスト・ゲスト間でファイルの同期が可能です。
例えば、Vagrantで仮想環境を作成したが、
開発に利用する IDEやエディタは普段使い慣れたホストOSのものを利用したい 、
などといった場合に便利です。
構文
下記の構文でホストとゲストの同期が可能です。
options
は0-n個の任意の数を指定可能です。
Vagrant.configure("2") do |config|
# other config here
config.vm.synced_folder "host_path", "guest_path", options...
end
有効化されるタイミング
vagrant up
もしくは vagrant reload
時に同期が有効化されます
owner / groupの変更
自動作成されるフォルダの owner / group を app ユーザーに変更する場合は以下。
Vagrantfile
config.vm.synced_folder "host_path", "guest_path", owner: "app", group: "app"
オプション
option | type | 内容 |
---|---|---|
create | boolean | host_pathが存在しなかった場合に作成するかどうか。デフォルトはfalse |
disabled | boolean | 同期を無効化するかどうか。デフォルトはfalse |
group | string | synced_folderのgroup指定。デフォルトはSSHユーザー |
mount_options | array | A list of additional mount options to pass to the mount command. |
owner | string | synced_folderのowner指定。デフォルトはSSHユーザー |
type | string | synced_folderの種類 |
サンプル
仕様
-
ゲストOSは Ubuntu 12.04 LTS
-
gitをinstall
-
ホストOSのVagrantfileがあるフォルダの一階層上に、git_clonerディレクトリを作成
-
ゲストOSの /home/vagrant/git_cloner を作成
-
双方のgit_clonerフォルダを synced_folder で同期する
-
ゲストOSの git_cloner ディレクトリに下記のリポジトリを clone する
https://github.com/tbpgr/git_cloner.git
※git_clonerは自作のRuby gemです
サンプルコード
# -*- mode: ruby -*-
# vi: set ft=ruby :
$script = <<SCRIPT
sudo apt-get update
sudo apt-get -y install git
cd /home/vagrant/
git clone https://github.com/tbpgr/git_cloner.git
SCRIPT
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "precise64"
config.vm.box_url = 'http://files.vagrantup.com/'+config.vm.box+'.box'
config.vm.synced_folder "../git_cloner", "/home/vagrant/git_cloner",
create: true, owner: "vagrant", group: "vagrant"
config.vm.provision "shell", inline: "echo 'start provision'"
config.vm.provision "shell", inline: $script
config.vm.provision "shell", inline: "echo 'finish provision'"
end
VM起動後、同期フォルダの確認
vagrantでゲストOSを起動し、git_cloner ディレクトリが
owner:vagrant, group vagrant で作成されていることを確認
$ %project_root%/sample
$ vagrant up
$ vagrant ssh
# ここからゲストOS
$ ls -l
drwxrwxrwx 1 vagrant vagrant 4096 Jun 20 12:55 git_cloner
-rwxr-xr-x 1 vagrant vagrant 6487 Sep 14 2012 postinstall.sh
git_cloner を clone できていることを確認。
$ cd git_cloner
$ ls
bin Gemfile git_cloner.gemspec lib LICENSE.txt Rakefile README.md spec
ホストOSに戻り、 git_cloner ディレクトリが作成され、
git_clonerリポジトリの中身も同期できていることを確認する。
$ exit
# ここからホストOS
$ cd ../
$ ls
git_cloner/ sample/
$ cd git_cloner
$ ls
bin/ git_cloner.gemspec LICENSE.txt README.md
Gemfile lib/ Rakefile spec/
ホストOSの git_cloner に hoge.txt を追加してみます。
$ echo hoge > hoge.txt
再度ゲストOSにログインして、git_cloner ディレクトリに
hoge.txt が追加されたことを確認。
$ cd sample
$ vagrant ssh
# ここからゲストOS
$ cd git_cloner
$ ls
bin git_cloner.gemspec lib Rakefile spec
Gemfile hoge.txt LICENSE.txt README.md
$ cat hoge.txt
hoge
以上で同期の設定を確認出来ました。
参考資料
Vagrant公式サイト
https://docs.vagrantup.com/v2/synced-folders/basic_usage.html