VagrantでVMを管理する

既に書き古された感がありますが、自分用にまとめておく。

Vagrantとは?

公式サイトはこちら

VirtualBoxVMWareなどの仮想マシンを簡単に設定・管理するためのフレームワークです。 プラグインを使うことで、AWSのインスタンスも同様に管理することができます。

導入

ダウンロードページから最新バージョンを落としてきます。2013/09/06時点での最新版は1.2.7です。

インストール先のOSに応じてパッケージが用意されていますので、適切なパッケージをダウンロードし、ぽちぽちとインストールすればOKです。

あと、当然ですが、仮想マシン作れるように、必要な物をインストールしておく必要があります。 VMWareは面倒なのでVirtualBox使います。

VMを登録

個人で使うのであれば、VMがいっぱいあるサイトから、使いたいイメージのURLをメモっておけば良いと思います。 そうはいってもどこの誰が作ったかも分からんVMをなんて使ってられるかという人もいるでしょうから、そういう人はVMイメージ作成からやっちゃいましょう。

Packerは非常に簡単に使えますので、Minimalな設定ファイルをどっかで探してきて自分の用途に合うように書き換えて使えばいいと思います。

使うVMが決まったら以下のコマンドを実行。

vagrant init centos63 https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box

これで、実行したディレクトリ内にVagrantfileというファイルが作られます。 vagrant initとだけ書いて実行してしまうと、baseというVM名で作られてしまいますので、最初から名前をちゃんと指定しておくのがいいと思います。

Vagrant.configure("2") do |config|
  config.vm.box = "centos63"
  config.vm.box_url = "https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box"
end

そして、おもむろに以下を実行。

vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Box 'centos63' was not found. Fetching box from specified URL for
the provider 'virtualbox'. Note that if the URL does not have
a box for this provider, you should interrupt Vagrant now and add
the box yourself. Otherwise Vagrant will attempt to download the
full box prior to discovering this error.
Downloading or copying the box...
Extracting box...te: 2293k/s, Estimated time remaining: --:--:--)
Successfully added box 'centos63' with provider 'virtualbox'!
[default] Importing base box 'centos63'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] The guest additions on this VM do not match the installed version of
VirtualBox! In most cases this is fine, but in rare cases it can
cause things such as shared folders to not work properly. If you see
shared folder errors, please update the guest additions within the
virtual machine and reload your VM.

Guest Additions Version: 4.1.18
VirtualBox Version: 4.2
[default] Mounting shared folders...
[default] -- /vagrant
  1. Vagrantfile内で設定されているURLからVMイメージをダウンロードし
  2. VirtualBoxへ登録し
  3. VMを起動し、SSHによるアクセスが可能な状態へ

持って行ってくれます。超簡単。 インストールしてあるVirtualBoxとVMイメージに入ってるVirtualBoxアドオンのバージョン差異があるためゴチャゴチャ言われてますが、特に気にしなくてもいいと思います。 気になるならイメージ作成からやればいいだけです。

ここまでで、以下のことが達成できました。

  • 特定の状態のVMをコマンド数発で建てられます。
  • セットアップがどうとか考える必要が無くなります。

VMを使う

vagrant upしたVMには、vagrant sshで入ることができます。公開鍵認証が設定されているので、パスワードがどうとか悩む必要もありません。

注意したいのは、Vagrantfileがあるディレクトリ(ローカル)と、vagrant upされたVM内の/vagrantは同期されていて、どちらからもアクセス可能になっています。 ファイルの受け渡しに非常に便利ですが、VM上でrm -rf /なんてやると・・・VMだからと油断してるとせっかく書いたVagrantfileが消えたりして悲しい思いをします。。。

プラグインを入れよう

VMには往々にして様々なパッケージやツールが突っ込まれてすぐ調子が悪くなったりします。今のままでもVMを捨てて別のVMをvagrant upすればいいだけではあるのですが、また作りなおすのか・・・と考えると鬱になってしまいます。

そういうときに便利なのがsaharaです。 プラグインのインストールはこんな感じです。

vagrant plugin install sahara
vagrant sandbox on
vagrant ssh
# VM内で何か破壊的な操作(パッケージのインストールとか設定変更など)

# 満足したら
vagrant sandbox commit

# 調子が悪くなったら
vagrant sandbox rollback
vagrant sandbox off

これで、いつでもVMを元の状態に戻すことが出来るようになります。 何かやって起動しなくなった・・・とかなっても、rollbackすればすぐに元の状態に戻せるようになるので大変便利です。 が、sandboxをONにしてないとダメなのでそこは注意です。

saharaは、任意の状態に戻すことはできない(Snapshotを撮れるわけではない)ので、そういうことをしたいのであれば別のプラグインを入れます。

VirtualBox限定にはなってしまいますが、vagrant-vbox-snapshotもいいと思います。

使い方はこんな感じです。あとはサイトをみるのが早いです。

vagrant snapshot take $vmname $label
vagrant snapshot list $vmname

1点わかりにくいのが、$vmnameに何を指定するのか?です。

  • Vagrantfileに書かれているbox名?→NO
  • VirtualBoxに登録されるランダムな登録名?→NO
  • vagrant statusで出力される内容→YES

わかりにくいので実際の出力を。

ikanikama% vagrant status
Current machine states:

default                   running (virtualbox)

こんな出力が出るので、defaultが$vmnameになります。罠・・・?

ここまでで以下のことが達成できます。

  • VMへの破壊的な操作を即座にやり直せる
  • VirtualBox限定ですが)任意の状態へ戻すことができる

まとめ

VirtualBoxVMWareなどの仮想マシンを使うのであればVagrantを一緒に入れてしまうのが良いよ。

snapshotを取ることもできるし、VirtualBoxのコンソールを自分でゴチャゴチャいじる必要はありませんよ。