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

More than 5 years have passed since last update.


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


ダウンロード

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

http://www.vagrantup.com/downloads


とりあえず試してみる

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

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