Vagrantを使って仮想OSを簡単に作成しよう
Vagrantとは?
ちょっとした確認やテストのため、いつ壊れてもいいような環境が必要なことがあります。 そういった際にはEC2を使えばすぐに環境が用意できますが、多少お金がかかりますし、プロジェクト毎にIAMアカウントを発行したりする場合は管理も面倒です。
そんなときには仮想化ソフトウェアをつかってローカルに仮想OSをインストールしましょう。 Oracle VM VirtualBoxを使用すれば、簡単に仮想OSを使用することができます。
じゃあVirtualBox使えばOKかといいたいところですが、自分でOSイメージをとってきてVirtualBoxにインストールしたり、 インストールした仮想マシンの設定をしたりと、けっこう面倒です。
そこで登場するのが、今回紹介するVagrantです。 VagantはVirtualBoxのフロントエンドとして使用することができるruby製のツールで、コマンドラインから仮想OSを管理できます。 なお、VirtualBoxだけでなく、VMWareやEC2(プラグインが必要)のフロントエンドとしても使用することができます。
さらに、Vagrantでは最近流行りのchef/puppetとも連携しやすく、仮想マシン起動〜アプリケーションの環境構築までを一気に 自動化できるようで、あわせて解説していることが多いです。
では、Vagrantのインストールから仮想OSのインストールまでを試してみましょう。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.5
- Vagrant : 1.2.2
- VirtualBox : 4.1.2
ソフトウェアのインストール
VirtualBoxのインストール
まずはここからVirtualBoxをダウンロードしてインストールします。
Vagrantxのインストール
昔は下記のようにgemを使用すればインストールできたのですが、これでインストールできるのは古いバージョンのVagrantです。
% gem install vagrant #これは昔の方法
最近はパッケージ版をダウンロードしてインストールするようになったので、ここからダウンロードしてインストールします。 次のようにバージョンが表示されたらインストール成功です。
% vagrant -v 1.2.2
CentOSをインストールしてみる
ではVagrantを使ってVirtualBoxにCentOSをインストールしてみましょう。
「vagrant box add <仮想マシン名> <path>」とすれば、pathにあるboxファイルを追加します。
pathはHTTPでもローカルのパスでもかまいません。なお、boxの削除は vagrant box remove
% vagrant box add centos http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-i386-v20130427.box
box listコマンドで確認してみましょう。ちゃんとaddされていますね。
% vagrant box list centos (virtualbox)
では、適当な場所にディレクトリを作成し、そこでinitコマンドを実行しましょう。 このコマンドを実行すると、Vagrantfileという設定ファイルを生成します。
% mkdir centos % cd centos % vagrant init centos ・ ・
Vagrantfileが生成されたら、upコマンドを実行して仮想OSを起動します。
% vagrant up
これで起動するはずなのですが、私の環境では下記のようなエラーがでて起動しませんでした。
Bringing machine 'default' up with 'virtualbox' provider... [default] Importing base box 'centos'... There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below. ・ ・ Progress object failure: NS_ERROR_CALL_FAILED
どうもこれはVirtualBoxの問題のようで、4.2を使用すると上記エラーが発生してしまうようです。 もしこれと同じエラーがでた場合、ここから古いバージョン(私は4.1.12を選択しました)をダウンロードしてインストールし直します。 ダウングレードしたらもう一度upコマンドを実行してみましょう。今度はエラーもなくコマンドが終了するはずです。
sshコマンドを使えばそのままsshログインできます。ちゃんと起動しているみたいですね。
% vagrant ssh Welcome to your Vagrant-built virtual machine. [vagrant@localhost ~]$
仮想OSが必要なくなったら、haltかdestroyで後処理しておきましょう。
% vagrant halt //停止 % vagrant destroy //削除
まとめ
今回はとりあえずvagrantをインストールして仮想OSを起動してみました。 vagrantの便利さはこんなものではなく、仮想OSでスナップショットを取って変更を元に戻したりできるpluginがあったり、 EC2インスタンスを管理したり、Chefと連携させたりもしています。(ここ参照) こういったツールはしっかりと覚えて、環境周りの手間を楽にしたいですね。
参考サイトなど
- Vagrant公式: http://www.vagrantup.com/
- EC2のChef SandboxをVagrant+BerkShelfでさくっと作る: https://dev.classmethod.jp/cloud/vagrantberkshelf/
- Vagrant を使って fluentd のクラスタリングを試す: https://dev.classmethod.jp/server-side/server/fluentd-clustering/