Vagrant

VagrantコマンドとVagrantfileの設定メモ

Vagrant のコマンドと Vagrantfile の設定をメモしておきます。


環境

Vagrant の利用には VirtualBox が必要です。ボクは Mac+VirtualBox+Vagrant で実行しています。

ホストは Mac を使用しています。


よく使う言葉

Vagrant を使っていてよく使う単語です。

単語
説明

ホストOS
SSH で接続する側の OS。ボクの場合 Mac。

ゲストOS
接続される側の OS。CentOS や Ubuntu など。

Vagrant の起動や停止については、実際には VirtualBox 上で VM が起動したり停止したりしています。


Vagrant を init

vagrant init で Vagrantfileを作成します。


Vagranfileを作成します

vagrant init


vagrant init をしたディレクトリに Vagrantfile という設定ファイルが作成されます。そして、vagrant upなどのコマンドが使えるようになります。


Vagrantを起動

Vagrantfile が作成されたディレクトリで、vagrant up コマンドを実行すると Vagrant が起動します。


Vagrantを起動

vagrant up


Vagrant が起動というのは実際には VirtualBox の VM が起動しています。Vagrant を起動した後に、VirtualBox.app を起動してみてください。


VMの状態を確認

Vagrant を起動したら、Vagrant が起動しているか vagrant status を使ってVMの状態を確認してみましょう。


VMの状態を確認

vagrant status


起動している場合


VMが起動している状態

default                   running (virtualbox)


停止している場合


VMが停止している状態

default                   poweroff (virtualbox)


Vagrant につながらない場合などは、まず vagrant status で状態を確認すると良いです。


Vagrantを停止

haltで停止できます。


Vagrantを停止

vagrant halt



Vagrantを再起動


Vagrantを再起動

vagrant reload



Vagrantへsshログイン


Vagrantへログイン

vagrant ssh


もしパスワードを聞かれる場合は、vagrantと入力します。


Vagrantのユーザーについて

OS 内の vagrant ユーザーのパスワードは vagrant です。

つまり、su コマンドで root になる場合にもパスワードを求められるので上記を利用します。


Vagrantのboxを追加


boxの追加方法

vagrant box add boxの名前 boxのパス


例えばcentos-5.6というboxを追加する場合


CentOSのbox追加例

vagrant box add centos-5.6 http://dl.dropbox.com/u/9227672/centos-5.6-x86_64-netinstall-4.1.6.box



Vagrantのbox一覧を確認

Vagrantのbox一覧を確認するコマンドです。


box一覧の確認

vagrant box list

centos64 (virtualbox, 0)
centos66 (virtualbox, 0)
laravel/homestead (virtualbox, 0.2.2)
miya0001/vccw (virtualbox, 1.9.5)


boxが一覧で表示されます。


Vagrantのboxを書き出し

既に存在するboxを書き出す場合です。boxを書き出す前にvagrant haltでvagrantを停止しておきます。


boxの書き出し

vagrant package

==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...



package.boxという名前でboxが書き出されます。

出力されたpackage.boxを利用すれば、dockerやchefなどを使用しなくてもほぼ同様の体験を実現できます。オススメです。


Vagrantのboxを削除


boxを削除

vagrant box remove box名



特定バージョンのboxを削除

box の名前が同じだが、box のバージョンを指定した削除方法です。

vagrant box remove box名 --box-version 1.9.5

--box-versionの後ろにバージョン番号を指定します。


Vagrant の box を update

box を updateする場合はbox updateを実行します。


boxのupdate

vagrant box update



Vagrant の box を物理的に削除したい

box は~/.vagrant.d/boxes/ディレクトリに配置されています。


アクティブなVMを確認

アクティブな Vagrant 環境を確認するコマンドです。

vagrant global-status


アクティブなVagrantを停止

vagrant global-status で表示された Vagrant を destroy したいときに実行します。


destroy

vagrant destroy VagrantのID



Vagrant のバージョンを確認

Vagrant のバージョンを確認します。


バージョンを確認

vagrant -v



Vagrant の ssh-config の設定

Vagrant に ssh で接続できない場合の調査などに使えます。


ssh設定の確認

vagrant ssh-config

Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/pugiemonn/Documents/workspace/pugiemonn.com/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL


Vagrantfileの設定


boxの設定


boxの設定

config.vm.box = "box名"



ネットワークの設定

ゲストマシンのネットワーク設定にはconfig.vm.networkを使用します。


networkの設定

config.vm.network "private_network", ip: "192.168.33.10"


ネットワークを少しかじるとわかるのですが、ホスト側に存在する ip が被った状態で複数の VagrantBox を立ち上げることはできません。ある box を ip アドレス192.168.33.10で立ち上げいている場合、新たに VagrantBox を立ち上げるには、192.168.33.10以外のipを指定する必要があります。


auto_config̶̶設定

Vagrant は自動でネットワークを設定してくれます。config.vm.networkauto_configが true になっているからです。Vagrant が勝手に設定してくれるネットワーク設定で都合が悪い場合はauto_config の値を変えてみると解消するかもしれません。

config.vm.network "private_network", ip: "192.168.33.10", auto_config:false

auto_config:falseをつけた例です。


synced_folder でフォルダの同期設定

synced_folder を使用すれば、Mac側でコードを書いて、Vagrant 経由で動作検証などのフローが簡単に構築できます。

ホスト PC と Vagrant のディレクトリを同期するには、synced_folder を指定します。


synced_folderの基本

config.vm.synced_folder "ホストPC側のパス", "Vagrant側のパス"


ホスト側の workspace ディレクトリと、ゲスト側・Vagrant側の/var/www/htmlを同期する場合の例です。


synced_folderの基本

config.vm.synced_folder "/Users/pugiemonn/Documents/workspace", "/var/www/html"


ホスト側のパスは"~/Documents/workspace"などと書くこともできます。VagrantfileをGitリポジトリに入れてしまう場合は、"./"のようにしてしまうと作業をシェアする際に、作業環境ごとにパスを書き換える必要がないので楽になります。


nfs で synced_folder を高速化

nfstrueにすると vagrant upが早くなります。ただし Mac 側の root パスワード入力が必要です。


参考