クラウド関連技術ブログ

今から始めるVagrant入門 #1

投稿日:2014/03/23カテゴリー:vagrant

みなさん初めまして、はまもつです。
冬も終わりが近づいて、桜が咲く季節になってきました。
季節の変わり目という事もあり私の周りでは体調が悪い方もチラホラ。。。
この時期でもインフルエンザは流行っているそうなので、まだまだ気は抜けませんね。

さて、今回から私が数回に渡ってVagrantの解説をさせて頂きます。
今回は1回目なのでVagrantの概要や基本的な使い方をご紹介したいと思います。

Vagrantとは

開発環境・テスト環境を作成する際に、仮想マシンを使用するケースが増えてきていますが、
仮想マシンの作成を各個人で行い、作成した環境に対してテスト用のアプリケーションやデータを作成する事は手間がかかるものです。

そこで、Vagrantを使用すると仮想マシンの作成を数ステップで完了する事ができ、かつプロジェクトのメンバが同じ環境の仮想マシンを使用する事ができます。

しかも、弊社のガシMAXが紹介しているChefとも連携が可能なため、すでにChefのレシピがあれば仮想マシンの作成からアプリケーションの展開までを自動で行う事ができます。
そして、必要なくなったタイミングで破棄する事もできますし、破棄した後にも再度同じ環境を再作成する事ができます。

ここまで色々と述べましたがVagrantとは仮想マシンを自動作成し、かつ展開するためのツールです。

Vagrantを使用して仮想マシンを操作するには・・・

Vagrantを使用して仮想マシンを作成し、操作するには以下のような仕組みになります。

Vagrantの仮想マシン作成イメージ

Vagrantの仮想マシン作成イメージ

・Provider

Vagrantには仮想マシンを作成する機能はないため、仮想マシンを作成するためのソフト(Provider)をインストールする必要があります。
ProviderにはVirtualBox、VMWare、Hyper-Vなどが対応しています。

・Box

VagrantはBoxと呼ばれる仮想マシンのテンプレートを元に仮想マシンを作成します。
Boxファイルは自分で作成したものも使用できますし、インターネット上でも多くのBoxファイルが存在するのでダウンロードして使用します。

・Provisioning

Boxファイルから仮想マシンを作成する時に、各種アプリケーションのインストールや設定を行う事ができます。
シェルスクリプトで作成する事ができますが、弊社のガシMAXが紹介しているChefと連携してインストールや設定を自動化する事ができます。

とりあえず使ってみる

習うより慣れろという事で簡単な仮想マシンを作成してみましょう!!
仮想マシンを作成するまでの流れは以下の通りになります。

  1. Provider(VirtualBox)のインストール
  2. Vagrantのインストール
  3. Boxファイルの取得
  4. Vagrantfileの作成
  5. 仮想マシンを作成&起動&終了&破棄
  6. Provisioningの設定
  7. HTTPサーバの機能を持つ仮想マシンを作成
  8. ホストOSから仮想マシンのHTMLを表示

VagrantはWindows、MacOS、Linuxに対応していますが今回の例ではMacOSを例にして説明を行います。

1.Provider(VirtualBox)のインストール

VirtualBoxのダウンロードページからMacOSX用のイメージをダウンロード後にインストールを行います。
特に特殊な手順はありません。

2.Vagrantのインストール

VagrantのダウンロードページからMacOSX用のイメージをダウンロード後にインストールを行います。
特に特殊な手順はありません。(当記事の執筆時点ではバージョン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

flops_vagrant1_01
VirtualBoxの管理画面を表示すると仮想マシンが起動している事を確認できます。
flops_vagrant1_02

仮想マシンへログインするには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の管理画面を表示すると仮想マシンが削除されている事を確認できます。
flops_vagrant1_03

仮想マシンの起動と終了に関するコマンドをまとめると以下のようになります。

コマンド
ステータス
説明
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の初期画面が表示されます。

flops_vagrant1_04

このようにVagrantを使用すると仮想マシンの作成からプロビジョニングが一連の動作で行う事ができます。
環境を構築している最中に問題が発生すればvagrant destroyで削除した後に、vagrant upで大体の事は何とかなります。
(この記事を執筆中が実際にそうでした)

Boxファイルは自分で作成する事もできるため、プロジェクト単位でBoxファイルを作成してプロジェクトメンバに配布する事でメンバ内の環境構築に関するトラブルとは無縁になるのではないでしょうか。

CONTACT

tel 092-986-2772
10:00〜17:00(土・日・祝日除く)
お問い合わせフォーム
page top