2014年3月30日日曜日

vagrant覚書

あちこちで仮想環境構築ツールのvagrantについて書かれてますが、操作コマンドと実際のデータファイルの関係を調べたので記録しておく。(応用きかせようとするとき、実際の仮想マシンのディスク等がどうなっているか理解しておいた方がいいので)

仮想マシンは昔からつきあっていますが(この世界では有名なVMwareが1.5の時から使っていました。当時英語のHPを一生懸命読んで、DL販売で購入しました。)、色々な実験をするときいちいちPCを準備しなくてもいいので重宝してました。しかし仮想マシンの構築はそれなりの手間がかかり、慣れてない環境を構築しようとして失敗したときなどは、再度仮想マシンの構築からやった方が早い時が多く、大変でした。(仮想マシンのディスクイメージのsnapshotや、コピーを保存しておいたりして、再構築しなくてもいいようにしましたがGB単位のデータ量になるのでコピーだけでも結構時間がかかります。)その点vagrantだとテンプレートがあればコマンド一発で仮想マシンのセットアップをしてくれるので、心置きなく環境構築を試すことができます。(といっても基本GUIなしの環境ですが)一通り手順と、よく使うコマンドの簡単な説明一覧を示しておきます。

1.Virtual Boxをインストールする
(個人的にはVirtual Boxにはあまり良いイメージは持ってません。発表当時はVMwareに比べて実行速度がかなり遅く、すぐに使わなくなってしまいました。今回改めて使ってみましたが、随分早くなったな〜という感じです。vagrantが基本的にVirtual Boxのテンプレートが多いので、こちらでいきます。)

2.vagrantをインストールする

3.テンプレートの準備
vagrant box add (テンプレート名) (URL) ;仮想マシンのテンプレートを取得する(今後、引数のテンプレート名で操作する)
list ;システムにインストールしてあるテンプレートの一覧
remove (テンプレート名) ;テンプレートの削除

4.仮想マシンの構築(仮想マシンの設定ファイル:Vagrantfileの場所で下記のコマンドを実行)
vagrant init (テンプレート名) ;vagrantの初期化(Vagrantfileの作成)
up ;仮想マシンの起動
ssh ;仮想マシンと接続
status ;仮想マシンの状態
suspend ;実行中の仮想マシンの一旦停止
resume ;一旦停止した仮想マシンの実行
status ;仮想マシンの状態
reload ;仮想マシンの再起動
halt ;仮想マシンの停止
destroy ;仮想マシンの削除(Virtual Box上の仮想マシンが削除される)

5.テンプレート・データの保存場所
~/.vagrand.d/boxes/(テンプレート名)
基本的にはvirtual boxの仮想ディスクイメージが入っている

6.vagrant設定ファイル
~/(任意)/Vagrantfile
仮想マシンの起動等を行う場所、任意のパス名を自分で設定する。
initコマンドにより作成される。

7.Virtual Boxの仮想マシン
~/VirtualBox VMs/(仮想マシン名)
初回のupコマンドで作成される。
vagrant設定ファイルのパス名を頭文字として、仮想マシン名は作成される。
vagrant設定ファイル毎に仮想マシンの実体は作成されるので、一つのテンプレートから複数の仮想マシンを作成・実行できる。

今回、UbuntuとMacの両方でvagrantを試してみましたが、全く同じような動作をしてくれました。(Rubyベースで作成されているとのことですが、それでも異なるOSで同じように動いてくれるというのはなかなか無いことです。)
仮想マシンの作成/起動は、5.、6.、7.の順番に行われますが、それぞれのコマンドで作成されるデータ、およびその関係を下図に示します。

説明を聞いて、最初の1個の仮想マシンを起動するまではなんとなくわかった気になるんですが、いざ複数の仮想マシンを起動したい、同じテンプレートで複数の仮想マシンを動かしたい、と考えたときどうなるんだろうと思い、データがどこに保存されているかまとめてみました。
従って、調子にのって多数の仮想マシン、テンプレートを作ると、~/.vagrant.d/以下、~/VirtualBox VMs/以下のHDD容量が大変なことになりますので注意しないといけません。

後、使っていて気づいたんですが、CentOSのテンプレートから作成した仮想マシンにおいて外部へのポートが閉じた設定(今のクライアント指向のデストロはこれが基本です)のままテンプレートが作成されていたものがありました。そのため$ vagrant sshで仮想マシンに接続はできますが、ping等まったく通らず、サーバーの実験をしようと思う時、ちょっと面倒くさいです。(逆に、vagrant sshはどうやって接続しているんだろう?と思ってしまいます。)

PS.
上記、仮想マシンの外部との接続ですが、その後CentOSでも設定でpublic_networkを一度有効にして新しいethのルート(仮想マシンに対するネットワークデバイス?)を設定してくるか聞いてきた時、有効にしたら仮想マシン上で新しいeth1が認識されるようになり、CentOSでも外部からのpingに応答するようになりました。(これは複数のEther HWがMacにあったためのようです。Ubuntuでは聞かれませんでした。)
その後はpublic_networkを無効にしても外部(host PC)からのpingは通るようになったままになりました。Virtual Boxのネットワークデバイス周りの設定を変更してしまったようです。

0 件のコメント:

コメントを投稿