Vagrantで簡単仮想環境構築 – インストールと簡単な使い方まで

Vagrantとは

ベイグラントと読むらしい(ずっとバーグラントと読んでたのは内緒)

VirtualBoxなどの仮想化ソフトウェアを便利に扱うためのフロントツール
vagrantコマンドを使って、以下のようにCLIから仮想環境を操作できる

# 起動
vagrant up

# プロビジョニング(ChefSoloなど)
vagrant provision

# 接続
vagrant ssh

# 終了
vagrant halt

VirtualBox以外にもこんなのも扱える

  • VMWare
  • EC2(Amazon Web Service)

Vagrantを使って便利になること

基本的にVagarntでできることはVirtualBoxだけでもできる(はず)
けどVagrantを使うことによって、いろんなことが簡単に便利にできるようになる

例えば

  • VMの設定をファイルで管理できる
    • ポートフォワーディング
    • ネットワーク
    • 共有ディレクトリ
    • メモリー
  • Chef/Pupetで簡単にマシン自動セットアップできる
  • 複数のマシン郡を一元管理して、一度に準備できる
    • 冗長構成を簡単に試せる
  • 仮想環境のスナップショット、ロールバックなどが簡単にできる
    • 要プラグイン

利用シーン

  • すぐに使える仮想環境を構築したい
  • ちょっとしたテストのために壊してもいい環境が欲しい
  • チームで同一の環境を簡単に構築したい

とか、いろいろあるけど
とりあえず便利だからVirtualBox使う際には噛ませておいて損は無い

Vagrantのインストール

前提環境

VirtualBoxがインストールされている

ダウンロード

ここからダウンロードしてインストール

とりあえず試してみる:Box & Vagrantfile

適当なディレクトリを作成してから、以下を実行

vagrant box add precise64 http://files.vagrantup.com/precise64.box
vagrant init precise64
vagrant up
vagrant ssh

もしくは、こっちでもよい

vagrant init precise64 http://files.vagrantup.com/precise64.box
vagrant up
vagrant ssh

Boxとは

BoxとはVagrant用に調整されたISOファイルみたいなもの

ここからいろんなBoxがダウンロードできる
http://www.vagrantbox.es/

登録されたBoxの一覧を確認するには下記コマンド

vagrant box list

Vagrantfile

vagrant initするとVagrantfileが作成される
これが仮想環境の設定ファイルであり、使用するBoxや、後述のネットワーク設定などを記述できる

いろいろ設定してみる

Vagrantfileを編集していく
仮想環境への変更の反映は下記コマンド

vagrant reload

プライベートネットワークを設定

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

ポートフォワーディングを設定

config.vm.network :forwarded_port, guest: 80, host: 8080

Chefで自動構築を試してみる

./cookbooks以下にchefのレシピを用意しておく

config.vm.provision :chef_solo do |chef|
  chef.cookbooks_path = "./cookbooks"
  chef.add_recipe “git”
end
vagrant provision

複数ホストを立ててみる

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise32"
  config.vm.box_url = "http://files.vagrantup.com/precise32.box"

  config.vm.define :web1 do |web|
    web.vm.network :private_network, ip: "192.168.1.11"
    web.vm.network :forwarded_port, host: 8001, guest: 8000
  end

  config.vm.define :web2 do |web|
    web.vm.network :private_network, ip: "192.168.1.12"
    web.vm.network :forwarded_port, host: 8002, guest: 8000
  end
end

各ホストへの接続は以下のようにVagrantfileで定義した名前をつけてやる

vagrant ssh web1
vagrant ssh web2

heathrow社では

本日、布教を済ませて、開発環境の配布していきます。
Vagrantfileと一緒に、ChefのレシピをGitで管理して、常に全員が同じ開発環境となるようことを目指します。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

芝原悠介

heathrowでは設計、開発、運用なんでもやってます。 好きな言語は、最近もっぱらRuby。 http://heathrow.co.jp/

芝原悠介の書いた記事

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ