みなさん初めまして、はまもつです。
冬も終わりが近づいて、桜が咲く季節になってきました。
季節の変わり目という事もあり私の周りでは体調が悪い方もチラホラ。。。
この時期でもインフルエンザは流行っているそうなので、まだまだ気は抜けませんね。
さて、今回から私が数回に渡ってVagrantの解説をさせて頂きます。
今回は1回目なのでVagrantの概要や基本的な使い方をご紹介したいと思います。
Vagrantとは
開発環境・テスト環境を作成する際に、仮想マシンを使用するケースが増えてきていますが、
仮想マシンの作成を各個人で行い、作成した環境に対してテスト用のアプリケーションやデータを作成する事は手間がかかるものです。
そこで、Vagrantを使用すると仮想マシンの作成を数ステップで完了する事ができ、かつプロジェクトのメンバが同じ環境の仮想マシンを使用する事ができます。
しかも、弊社のガシMAXが紹介しているChefとも連携が可能なため、すでにChefのレシピがあれば仮想マシンの作成からアプリケーションの展開までを自動で行う事ができます。
そして、必要なくなったタイミングで破棄する事もできますし、破棄した後にも再度同じ環境を再作成する事ができます。
ここまで色々と述べましたがVagrantとは仮想マシンを自動作成し、かつ展開するためのツールです。
Vagrantを使用して仮想マシンを操作するには・・・
Vagrantを使用して仮想マシンを作成し、操作するには以下のような仕組みになります。
・Provider
Vagrantには仮想マシンを作成する機能はないため、仮想マシンを作成するためのソフト(Provider)をインストールする必要があります。
ProviderにはVirtualBox、VMWare、Hyper-Vなどが対応しています。
・Box
VagrantはBoxと呼ばれる仮想マシンのテンプレートを元に仮想マシンを作成します。
Boxファイルは自分で作成したものも使用できますし、インターネット上でも多くのBoxファイルが存在するのでダウンロードして使用します。
・Provisioning
Boxファイルから仮想マシンを作成する時に、各種アプリケーションのインストールや設定を行う事ができます。
シェルスクリプトで作成する事ができますが、弊社のガシMAXが紹介しているChefと連携してインストールや設定を自動化する事ができます。
とりあえず使ってみる
習うより慣れろという事で簡単な仮想マシンを作成してみましょう!!
仮想マシンを作成するまでの流れは以下の通りになります。
- Provider(VirtualBox)のインストール
- Vagrantのインストール
- Boxファイルの取得
- Vagrantfileの作成
- 仮想マシンを作成&起動&終了&破棄
- Provisioningの設定
- HTTPサーバの機能を持つ仮想マシンを作成
- ホストOSから仮想マシンのHTMLを表示
VagrantはWindows、MacOS、Linuxに対応していますが今回の例ではMacOSを例にして説明を行います。
1.Provider(VirtualBox)のインストール
VirtualBoxの
特に特殊な手順はありません。
2.Vagrantのインストール
Vagrantの
特に特殊な手順はありません。(当記事の執筆時点ではバージョン1.5.1でした)
Vagrantインストール後は以下のコマンドを入力してインストールの確認を行います。
flops:~$ vagrant -v
Vagrantのバージョン情報が表示されていればインストールが正常に完了しています。
flops:~$ vagrant -v
Vagrant 1.5.1
3.Boxファイルの取得
BoxファイルはVagrant CloudやVagrantbox.esにて多くのBoxファイルが提供されています。
今回はVagrant CloudからCentOS 6.5のBoxファイルを取得して使用してみましょう。
flops:~$ vagrant box add chef/centos-6.5
Vagrant CloudではVirtualBox用とVMWare用のBoxファイルが用意されているため、追加するBoxファイルを指定します。
今回はVirtualBox用をインストールするため”1″を入力します。
flops:~$ vagrant box add chef/centos-6.5 ==> box: Loading metadata for box 'chef/centos-6.5' box: URL: https://vagrantcloud.com/chef/centos-6.5 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) virtualbox 2) vmware_desktop Enter your choice: 1
Boxファイルの追加が完了すると以下のようになります。
flops:~$ vagrant box add chef/centos-6.5 ==> box: Loading metadata for box 'chef/centos-6.5' box: URL: https://vagrantcloud.com/chef/centos-6.5 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) virtualbox 2) vmware_desktop Enter your choice: 1 ==> box: Adding box 'chef/centos-6.5' (v1.0.0) for provider: virtualbox box: Downloading: https://vagrantcloud.com/chef/centos-6.5/version/1/provider/virtualbox.box ==> box: Successfully added box 'chef/centos-6.5' (v1.0.0) for 'virtualbox'!
Boxファイルの一覧を表示すると現在追加しているBoxファイルが確認できます。
flops :~$ vagrant box list
chef/centos-6.5 (virtualbox)
メモ
Vagrantで使用するコマンドの一覧と解説は”-h”オプションで表示できます。
例としてboxコマンドの一覧を表示すると以下のようになります。
flops :~$ vagrant box -h Usage: vagrant box [] Available subcommands: add list outdated remove repackage update For help on any individual subcommand run `vagrant box -h`
今回はVagrant CloudからBoxファイルをダウンロードしたため、ダウンロード用のURLを指定しませんでしたが、
Vagrantbox.esからBoxファイルを取得する場合は、Boxファイル名とURLを以下のようにして指定する必要があります。
flops :~$ vagrant box add BOXファイル名(任意) ダウンロードURL
4.Vagrantfileの作成
仮想マシンの設定ファイルを保存するディレクトリを適当な場所に作成します。
flops:~ $ mkdir -p vagrant/centos65 flops:centos64 $ cd vagrant/centos65/
initコマンドでVagrantfileを作成します。
flops:centos65 $ vagrant init chef/centos-6.5 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
centos64ディレクトリ内にVagrantfileが作成されていると思います。
Vagrantfileは仮想マシンを作成する際の様々な設定がRubyで記述されているファイルです。
中身を確認すると殆どコメント化されているため、必要な部分をコメントアウトして使用する事になります。
コメント部分を除いたVagrantfileは以下のようになっています。
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "chef/centos-6.5" end
このままでも良いのですが、仮想マシンが起動した事を確認しやすい様に
Vagrantfileを編集してVirtualBoxのGUIを表示するようにします。
Vagrantfileの47,49,53行目のコメントを解除すると以下のようになりVirtualBoxのGUIが表示されるようになります
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "hchef/centos-6.5"
config.vm.provider "virtualbox" do |vb|
vb.gui = true
end
end
5.仮想マシンを作成&起動&終了&破棄
これで仮想マシンを作成する準備が整いました。vagrant upコマンドで仮想マシンが作成され起動します。
flops:centos65 $ vagrant up
VirtualBoxの管理画面を表示すると仮想マシンが起動している事を確認できます。
仮想マシンへログインするにはloginにvagrant、passwordにvagrantと入力するとログインする事ができます。
仮想マシンの状態はvagrant statusコマンドで確認できます。
flops:centos65 $ vagrant status Current machine states: default running (virtualbox)
仮想マシンをシャットダウンするにはvagrant haltコマンドを使用します。
flops:centos65 $ vagrant halt ==> default: Attempting graceful shutdown of VM...
再度起動する時はvagrant upで起動する事ができます。
仮想マシンを削除するにはvagrant destroyを使用します。
削除する際に確認を求められるので’y'と入力すると仮想マシンを削除する事ができます。
flops:centos65 $ vagrant destroy default: Are you sure you want to destroy the 'default' VM? [y/N] y ==> default: Destroying VM and associated drives...
VirtualBoxの管理画面を表示すると仮想マシンが削除されている事を確認できます。
仮想マシンの起動と終了に関するコマンドをまとめると以下のようになります。
コマンド
|
ステータス
|
説明
|
---|---|---|
up | running | 仮想マシンを作成 起動 |
halt | stop | 終了(シャットダウン) |
destroy | not created | 仮想マシンを削除 |
suspend | saved | 中断 |
resume | running | 再開 |
reload | running | Vagrantfileを再読み込み後に再起動 |
SSHでログインする
Vagrantで仮想マシンを作成すると標準でSSHを使用したログインができます。
vagrant upで仮想マシンを起動した状態の時に、vagrant sshコマンドを使用するとSSHでログインができます。
この場合はloginとpasswordの入力は不要です。
flops:centos65 $ vagrant ssh
Last login: Fri Mar 7 16:57:20 2014 from 10.0.2.2
[vagrant@localhost ~]$
6.Provisioningの設定
Provisioningの設定を行うと、仮想マシンの作成時に様々な操作を自動化する事ができます。
今回は仮想マシン作成時にシェルスクリプトを実行して、HTTPサーバが起動した状態になるようにVagrantfileを編集します。
具体的には以下の編集を行います。
- HostOSからアクセスできように、26行目のonfig.vm.networkに関するコメントを解除
- ShellのProvisioningを追加
- yumのリポジトリを更新
- ファイアウォールを停止(あくまでサンプルなので…)
- 再起動時にファイアウォールを無効化(あくまでサンプルなので…本番ではやらないように)
- Apacheをインストール
- 再起動時にApacheのサービスを有効化
- Apacheのサービスを起動
編集後のVagrantfileは以下のようになります。
VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "chef/centos-6.5" config.vm.network "private_network", ip: "192.168.33.10" config.vm.provider "virtualbox" do |vb| vb.gui = true end config.vm.provision :shell, :inline =><-EOT yum update -y service iptables stop chkconfig iptables off yum -y install httpd chkconfig httpd on service httpd start EOT end
7.HTTPサーバの機能を持つ仮想マシンを作成
Provisioningは初回のvagrant upの時にのみしか実行されないので一度仮想マシンを削除した後に実行します。
flops:centos65 $ vagrant destroy flops:centos65 $ vagrant up
今回は一度仮想マシンを削除しましたが、–provisionオプションを付与するとProvisionが実行されます。
flops:centos65 $ vagrant up --provision flops:centos65 $ vagrant reload --provision
8.ホストOSから仮想マシンのHTMLを表示
Vagrantfileに異常がなければ、仮想マシンが作成され起動した後にシェルスクリプトが実行されhttpdサービスが実行されていると思います。
ホストOSのブラウザで”192.168.33.10″にアクセスするとApacheの初期画面が表示されます。
このようにVagrantを使用すると仮想マシンの作成からプロビジョニングが一連の動作で行う事ができます。
環境を構築している最中に問題が発生すればvagrant destroyで削除した後に、vagrant upで大体の事は何とかなります。
(この記事を執筆中が実際にそうでした)
Boxファイルは自分で作成する事もできるため、プロジェクト単位でBoxファイルを作成してプロジェクトメンバに配布する事でメンバ内の環境構築に関するトラブルとは無縁になるのではないでしょうか。