そっちはどちらかと言うと共用サーバでの話。今回は自分自身が開発したり、ソフトウェアを評価したりするときにも仮想環境(特にJail)は便利だよ、という話。
普段、自分の開発環境はMac OS X(iMac / Macbook)なんだけど、両方ともVMWare Fusionを入れ、その上でFreeBSDを動かしている。そしてさらにそのFreeBSDの中にさらに複数の仮想環境であるJailが動いている。(ちょっとややこしい)
例えば、自宅のiMacの中のFreeBSDには以下のJailが入っている。
% ezjail-admin list
STA JID IP Hostname Root Directory
--- ----- --------------- --------------------- -------------------------
DR 1 192.168.252.204 rems.madoro.org /usr/local/jails/rems.madoro.org
DR 2 192.168.252.205 rems3.madoro.org /usr/local/jails/rems3.madoro.org
DR 3 192.168.252.207 puppets.madoro.org /usr/local/jails/puppets.madoro.org
DR 4 192.168.252.206 puppetc.madoro.org /usr/local/jails/puppetc.madoro.org
DR 5 192.168.252.208 puppetc2.madoro.org /usr/local/jails/puppetc2.madoro.org
DR 6 192.168.252.203 pgsql84.madoro.org /usr/local/jails/pgsql84.madoro.org
DR 7 192.168.252.202 pgsql82.madoro.org /usr/local/jails/pgsql82.madoro.org
DR 8 192.168.252.211 mongodb.madoro.org /usr/local/jails/mongodb.madoro.org
DR 9 192.168.252.209 mogilefs.madoro.org /usr/local/jails/mogilefs.madoro.org
DR 10 192.168.252.212 gerrit.madoro.org /usr/local/jails/gerrit.madoro.org
DR 11 192.168.252.201 couchdb.madoro.org /usr/local/jails/couchdb.madoro.org
DR 12 192.168.252.210 couchdb2.madoro.org /usr/local/jails/couchdb2.madoro.org
DR 15 192.168.252.213 redis.madoro.org /usr/local/jails/redis.madoro.org
これだけの仮想環境がVMWare上のFreeBSDに入っている。使わなくなった仮想環境は消しているので、上にあるのは現役で使っている仮想環境のみ。オーバヘッドが大きそうだなあ、と思う人もいると思うがVMWare的に割り振っているメモリは、かなり余裕を持たせて1GB。少し前までは512MBだったがDatabase系がメモリ食いなので増やした。最近はノート型PCでも4GBとかいけるので、1GBくらいなら許容範囲だと思う。CPUやディスク負荷的には余裕。もちろん激しいことをしたら全体が遅くなるが、そういうことが必要になった場合(たとえば負荷テストとか、大規模データ処理とか)には別の環境を用意すればいいだけの話。
デスクトップ用途のマシンにサーバソフトウェアは入れない
デスクトップ用途のMac上に色々なサーバソフトウェアを入れるのは好きではない。Macに限らず、Windowsでもなんでも「デスクトップ用」として使ってる環境にサーバ系ソフトを色々入れるのはよろしくない。とは言え、開発環境としてはオールインワンで開発に必要なすべての物が物理的な一台に入っていると便利なことも多いので(ちょっと外出先でプログラミングとかね)、自分は仮想環境を使っている。
仮想環境のすばらしいところ
で、仮想環境のいいところは、たとえば、たった今 redis.madoro.org をResqueの評価用に作った。現在評価中なんだが、その後「やっぱりResque使わない」となったとしよう。この場合ばっさりその仮想環境を消せば、すべてがなかったことになる。他の環境がまったく汚れない。もっとすばらしいのは、独立した仮想環境にインストールすることによって、「Redisをインストールしたら、PostgreSQLが動かなくなった!」(例です)とかアホな事態が避けられること。また、仮想環境ひとつずつが独立したIP addressで動くので、port 80がかぶるから、こっちは8080で動かそう、とか本質でないことを考える時間も節約できる。アホなことで時間を使わない、のが生産性向上の第一歩。
なぜ、FreeBSDのJailなのか
こういうことをするのには、もちろんどんな仮想環境でもいいんだけど、FreeBSDのJailを勧めたいのは、軽くて早いから、早いというのは、特に、インストールやアンインストールにかける時間の面がでかい。人間的な手間も少ないし、実際に作成にかかる時間も少ない。慣れれば1分とかで新しい環境ができる。Jail以外の仮想環境も以前は使っていたけど、怠け者の自分には色々手がかかりすぎで使わなくなってしまった。たとえば、「ちょっと空いた時間にResqueの評価がしたくなった。でも環境の設定に1時間かかる」とかだと一気に冷めてしまう(自分は短気なので5分でも冷めるかも)。
なんか、だらだらと書いてしまったけど、このFreeBSD/Jailを使った環境は、自分のこの10年の中でも革新的なことだったので、つい熱くなってしまう。紹介してくれた同僚の某氏ありがとう!
記事の内容についての質問、苦情、間違いの指摘等なんでもtwitterでどうぞ。 Tweet