Vagrant(&VirtualBox)で作る仮想開発環境

/

Vagrant

Vagrantは仮想マシン作成ソフトのラッパーで同一構成の仮想マシンを作成する事が出来ます。
VagrantはBoxと呼ばれるテンプレートを使って仮想マシンを立ち上げるため、VirtualBoxなどでisoファイルを使って一から作るよりも簡単に環境を構築する事が可能です。
チーム内の開発メンバーで環境を揃えるのが容易なため開発環境の構築などに使われています。
vagrantup.com
HashiCorp/開発会社

インストール

VirtualBoxのインストール

Vagrantを使うにはVagrantが対応している仮想マシン作成のためのソフトが必要です(Providerと呼ばれています)。
今回は無料で使えるVirtualBoxを使用しています。Vagrantを使う場合にはとりあえずVirtualBox本体のインストールが出来れていればOKです。

VirtualBoxで仮想環境作ってみる/koltatt

Vagrantのインストール

ubuntu

$ apt-get install vagrant
$ vagrant -v
Vagrant 1.8.1

Box

Vagrantのインストールが完了したら立ち上げたい仮想マシンのBoxを用意します。
Boxは自分で作成するか外部のサイトからダウンロードして入手します。

Boxの入手出来る外部サイト

HashiCorpが公開しているBoxのリスト

bento(公式)
bento(github)

bento

bentoはプロビジョニングツールのchefを開発しているChef社が公開しているVagrantのBOXです。

日本人として最初に思うのがなぜ名前が「弁当」なのだという事ですが、おそらく「ワンパッケージに手軽で」という意味で名付けたのだと思います。どうやらアニメなどの影響で日本の弁当という文化は外国の人からすると、結構興味をそそられるもののようです。
一度聞いたら名前を忘れないというメリットはあると思います。

Boxの入手元

Vagrantを使う際の注意点としてVagrantのBoxは誰でも自由に作れるためセキュリティに対する保証がされていないという事があります。そのため出所不明の適当なBoxを使うと妙なソフトウェアやスクリプトが仕込まれている可能性を否定出来ません。仕事で使う場合などでセキュリティにこだわるのであれば自分でBoxを作るべきだと思いますが、一からBOXを作ると手間がかかります。
状況に合わせて手間とセキュリティのバランスを考えて選択をするわけですが、利便性を優先して他人の作ったBox使う場合でもなるべく信用のあるサイトのものを使うべきでしょう。
bentoを提供しているChef社は有名な企業ですが、有名であったり公式サイトだからといって必ずしも安全が保証されているわけではありません。しかし、しっかりしたコミュニティや企業がで作者であるならば詳しい情報の無い個人等よりもやチェックはしやすく信用はあると思います。

そういった理由で僕の場合は開発環境の場合には開発元がある程度信用出来るなら大丈夫だろうと割り切ってこれらのサイトからダウンロードしたBoxを使う事が多いです。

Boxの追加

Boxはuser/boxの表記で管理されています。

$ vagrant box add bento/ubuntu-14.04

Providerの選択

Boxを追加する際に仮想環境を立ち上げるのに使うソフトウェアを聞かれる事があります。

This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1 parallels 
2 virtualbox
3 vmware_desktop

今回使うのはvirtualboxなので2を選択します。

Boxのダウンロードにはしばらく時間がかかります。
ダウンロードが終わったら確認してみます。

$ vagrant box list
bento/centos-7.2   (virtualbox, 2.2.5)
laravel/homestead  (virtualbox, 0.4.4)
bento/ubuntu-14.04 (virtualbox, 2.2.7)

無事にリストに追加されているのが確認出来ます。

仮想マシンの起動

Boxのダウンロードが出来たら、いよいよ起動をしてみます。

Vagrantの初期化

Vagrantを起動するには、まず仮想環境のインスタンスを作成したいディレクトリでVagrantの初期化を行います。
リストから任意のBoxを選んで初期化を実行します。

$ vagrant init bento/ubuntu-14.04

初期化が済むとディレクトリ内にVagrantfileという名前のファイルが作成されます。
Vagrantfileは仮想マシンの設定を書き込むためのファイルで、このファイルのあるディレクトリでvagrant upと打ち込めば仮想マシンが立ちあがります。

$ vagrant up

仮想マシンが起動したかステータスの確認をします。

$ vagrant status

Current machine states:
default                   running (virtualbox)

起動が完了したら仮想マシンにsshで接続してみます。
Vagrantではコマンドで簡単に仮想マシンにsshでのログインする事が可能です。

$ vagrant ssh

Welcome to Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-86-generic x86_64)
...
vagrant@vagrant:~$ 

Vagrantで作成した仮想マシンのユーザー名はvagrantになっており、パスワードも同様です。

ssh接続をやめる方法は通常のログアウトと同じです。

$ exit

logout
Connection to 127.0.0.1 closed.

使い終わった仮想マシンは停止しておきます。

$ vagrant halt
$ vagrant status

Current machine states:
default                   poweroff (virtualbox)

不要になった仮想マシンは破棄出来ます。

$ vagrant destroy

この際破棄されるのはboxのインスタンスであってboxそのものではありません。
そのため失敗した仮想マシンを破棄しても、同じ環境のものをすぐに作成する事が出来ます。

Vagrantfile

Vagrantでは個々の仮想マシンの設定をVagrantfileによって行います。

boxの指定

config.vm.box = “bento/ubuntu-14.04”

ネットワークの設定

config.vm.networkでvagrantで使うprivate netwokrやホストOSやゲストOSのport fordingについて設定できます。

共有ディレクトリ

Vagrantではホスト側のvagrantfileの置いてあるディレクトリとゲスト側のhomeディレクトリである/vagrantが初めから共有ディレクトリになっています。そのためちょっとしたファイルを渡したい程度であればホスト側のディレクトリに置いたあとにゲスト側から目的のファイルを移動すれば簡単に移動出来ます。

synced_folder

またVagrantfileで共有ファイルの設定をする事も出来ます。
例えばホスト側の作業ディレクトリとゲスト側のウェブサーバーのルートディレクトリを繋いでしまえば、変更の結果をホスト側のブラウザで確認しながら開発をすることが出来ます。

config.vm.synced_folder “host/workspace/webpage", "/var/www/html"

あとがき

Vagrantはwebアプリなどの開発環境を立ち上げるのを非常に簡単にしてくれます。
集団で作業をする時に開発環境を揃えるのに便利なほか、vccw/wordpressHomestead/Laravelなど特定のアプリケーション用にカスタマイズされた開発環境も簡単に導入出来るようになるので、仮想環境を作成するソフト使うなら一緒に入れておくと色々と重宝するソフトです。