vagrant

Vagrant | synced_folder でホストOSとゲストOSの任意のフォルダを同期する

More than 3 years have passed since last update.

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