vagrantをいじっているんですが、boxとは一体何なのか、vagrant destroyやhaltコマンドはどうゆう挙動になるのかちょっとわかんなくなってきたので整理してみる。
かなり初歩的でアレですが。
環境
Mac OSX 10.8 Lion
veeweeで自作した.boxファイルを使う(CentOS 6.4)
いろんなパターンを試してみる
まずは適当に叩いてみる。
1 2 3 4 5 6 7 8 |
$ vagrant box Usage: vagrant box <command> [<args>] Available subcommands: add list remove repackage |
vagrant boxコマンドのサブコマンドがわかる。
vagrant box listで既にbox addされているものを一覧表示出来るみたい。まだ何もaddしていない場合は下記みたいになる。
1 2 |
$ vagrant box list There are no installed boxes! Use `vagrant box add` to add some. |
直接VirtualBoxを起動してみる。
まだ何もないのがわかる。
ひとまず自前のboxをaddしてみます。
1 2 3 |
$ mkdir vagrant_box_blog $ cd vagrant_box_blog $ vagrant box add centos ~/boxes/CentOS-6.4-x86_64-minimal.box |
この時点ではVirtualBoxの画面に変化はありませんが、boxは正しくaddされているようです。
1 2 |
$ vagrant box list centos (virtualbox) |
どうやらaddされたboxは ~/.vagrant.d/boxes に展開されているみたいです。OSのイメージもここに保存されているみたいなので、オリジナルの.boxファイルとは独立するみたい。なのでbox addした後は.boxファイルは不要になります。
Vagrantfileを作ります。これでcentosというboxを使用する設定のVagrantfileが出来上がります。
1 2 3 |
$ vagrant init centos $ ls Vagrantfile |
VMを起動します。
1 |
$ vagrant up |
どうやらVagrantfileがあるディレクトリ名がVitualBox上でのVM名になるみたい。VagrantfileごとにVMを管理するということなのか。
ちょっと検証するために、VM上にtestfileというファイルを作成しておきます。
1 2 3 4 5 6 |
$ vagrant ssh 〜 $ touch testfile $ ls testfile $ exit |
別のVMを作ります。
今度はbox addせずにいきなりvagrant initしてみます。
1 2 3 4 5 6 |
$ cd .. $ mkdir vagrant_box_blog2 $ cd vagrant_box_blog2 $ vagrant init centos2 ~/boxes/CentOS-6.4-x86_64-minimal.box $ ls Vagrantfile |
先にbox addした場合と違い、config.vm.box_urlというプロパティが有効になっていますが、vagrant upした際に自動的にbox addされ、結果的にはどっちの場合も同じ状態になります。
1 |
config.vm.box_url = "/Users/username/boxes/CentOS-6.4-x86_64-minimal.box" |
1 2 3 4 |
$ vagrant up $ vagrant ssh 〜 $ ls |
testfileがないことを確認。これでオリジナルの.boxファイルとは関係なく、別々のVMが起動していることが確認出来ましたね!
1 |
$ exit |
box listを確認。centos2が追加されていますね。
1 2 3 |
$ vagrant box list centos (virtualbox) centos2 (virtualbox) |
続いて、仮想マシンを削除してみます。
1 |
$ vagrant destroy |
破棄されたのはVMであって、boxではありません。なのでboxは残ります。
1 2 3 |
$ vagrant box list centos (virtualbox) centos2 (virtualbox) |
どうやらぼくはこの辺で混乱してたみたいです。boxはあくまでもOSのイメージで、VMはboxから生成されているけどboxそのものとは独立しているもの、ということなのか。言葉だけだとわかりづらいですけど。
vagrantコマンドのhaltとかdestroyとか
続いてvagrant haltとvagrant destroyの違いあたりを確認します。
既に起動しているVMを停止させます。
1 2 |
$ cd ~/vagrant_box_blog $ vagrant halt |
VirtualBox上では「電源オフ」となっています。シャットダウン状態と考えていいっぽい。
再度起動します。
1 2 3 4 |
$ vagrant up $ vagrant ssh $ ls testfile |
シャットダウンして再び起動しただけなので、当然testfileがありますね。
続いてVMを破棄してみます。先程同様VirtualBox上からも消えます。
1 2 3 |
$ exit 〜 $ vagrant destroy |
再びvagrant upしてみます。
1 2 3 |
$ vagrant up $ vagrant ssh $ ls |
testfileがなくなりました。つまりbox addした時点の状態に復元されているわけですね。
余計なものが入っていないOSの標準の状態でbox addしておいて、あとはVM立ち上げてそれぞれ個別の設定を施していくっていう感じの使い方でいいのかな。なんだ理解してしまえば全然シンプルな仕組みじゃん。
ちなみに、VMを生成すると ~/VirtualBox VMs 配下にVMごとのディレクトリが作られるみたい。

原田 敦

最新記事 by 原田 敦 (全て見る)
- Rails Engineでブログ機能追加するgemを作る - 2015年3月15日
- WEBエンジニア一人だけでサービスを作りきる方法-夫婦のための自動ごはん予定お知らせサービス「GoHaaan」制作でやったこと - 2015年3月7日
- CentOS6でMariaDBのDynamic Columnsを試してみた - 2015年2月28日