[Vagrant & VirtualBox] Vagrant: network, synced_folder, provisioning

続きです。

Network に繋げる

方法が3つある。
Vagrantfile

  # The url from where the 'config.vm.box' box will be fetched if it
  # doesn't already exist on the user's system.
  # config.vm.box_url = "http://domain.com/path/to/above.box"
  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # config.vm.network :forwarded_port, guest: 80, host: 8080
  # 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.10"

コメントを外して 192.168.33.10 で繋げる例。

  # 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.10"
% subl Vagrantfile
% vagrant reload

Vagrantfile

共有フォルダ(synced_folder)を使う

Mac上のプロジェクトフォルダ、つまり Vagrantfile のあるフォルダは、仮想マシン上で共有されている。

/Users/myuser/projects/VB_CentOS

% pwd
/Users/myuser/projects/VB_CentOS
% ls
Vagrantfile

対応する仮想マシン上のディレクトリは以下になる。

/vagrant

[vagrant@localhost ~]$ cd /vagrant
[vagrant@localhost vagrant]$ pwd
/vagrant
[vagrant@localhost vagrant]$ ls
Vagrantfile

使い方として、例えば共有フォルダをドキュメントルートにしてしまう。

$ sudo rm -rf /var/www/html
$ sudo ln -fs /vagrant /var/www/html

nfs mount を利用する。

Provisioning

Vagrantfile を編集して、仮想マシンが起動した後の設定を自動化できる。
Provisioning のための高度なツールとして、ChefPuppet がある。

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "centos64"
  # config.vm.provision :shell, :inline => "echo hello world"
  config.vm.provision :shell, :path => "provision.sh"

path で別ファイルを指定ができるので、シェルスクリプトで指定してみる。
provision.sh

sudo yum -y install httpd
sudo service httpd start
sudo chkconfig httpd on

vagrant up か、起動しているならば vagrant provision で設定を反映できる。

% vagrant provision

確認する。

% vagrant ssh
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$ sudo service httpd status
httpd (pid  1867) is running...