VZNopeというOpenVZ wrapperの紹介 (1)
前置きの前置き
これのブログエントリ楽しみにしてますということをこの前言われましたので、書くことにしました。
背中を押してくれた人、ありがとうございます。
前置き
このまえ、Dockerに入門してみたけど、僕の用途とは合わないと思った件などという割とでかい釣り針っぽい感じのエントリを公開したわけですが、あの後も少し触っており、部分的に活用はしているものの、開発環境をお手軽に構築できるツールとしてはやはり「コレジャナイ」感を拭いきれずにいます。
そして、僕は結構長い間OpenVZを触りまくってた時期があり、ノウハウも相応に持ち合わせています(と思っている)。じゃあ、Dockerを触って「便利だな」と思った機能をOpenVZにも取り入れたらどうだろう・・・!
そういう割と大雑把で向こう見ずな思想に基づき、VZNopeというものを作ったので、紹介したいと思います。ちなみに今のところ非常に雑な作りなので、system()とか呼びまくりです。素直にshellとかで実装すれば良かったかな!w
VZNopeとは?
OpenVZに以下の機能を追加するラッパーです。
OSテンプレートの管理
コンテナ作成手順の簡略化とバージョンコントロール
既存機能の一部強化
一般ユーザ(not root)向けCLIの提供
動作に必要なもの
Ubuntu 14.04 or CentOS 6 (他のLinux distroでも動作するかもしれないけど、確認してません)
OpenVZ (この辺にインストールの仕方かいてます)
vzctlやvzlistなどのいわゆるvztools
git
wget
perl-5.12 or later (それ以前ではセットアップツールの動作確認をしてません)
入手とインストール
$ git clone https://github.com/ytnobody/VZNope.git
$ cd VZNope
$ ./setup.sh
ここまでやったら、ひたすら待ちましょう。
プロンプトが戻ってきたら、あとはこんな感じにvisudoしてあげるといいです。
$ pwd vzn ### vznのパスをしらべる
$ sudo visudo ### 'youruser ALL=(root) NOPASSWD: /path/to/vzn' みたいな感じの行を追加する
最後に、$HOME/.bash_profileを読み直してやるとオーケーです。
$ . $HOME/.bash_profile
無事にインストールができていれば、vznコマンドが実行できるはずです。
~$ vzn
usage:
vzn [subcommand] [options]
subcommands:
build
commit
commit-log
create
destroy
enter
exec
get-image
help
images
images-available
list
set
start
stop
vznfile
こんなかんじ。サブコマンドがいっぱいありますけど、どれもいきなりぶっ叩いても苦しい思いをすることはないはずです。
利用可能なイメージ(OSテンプレート)を見てみる
無事にvznが実行できるようになったら、今度はイメージ選びをしたいですね。vzn images-available としてみましょう。
~$ vzn images-available
DIST VERSION ARCH TAG SIZE MODIFIED
----------------------------------------------------------------------------------------------------
centos 5 x86 devel 197M 2014-05-14 02:36
centos 5 x86 174M 2014-05-14 02:35
centos 5 x86_64 devel 208M 2014-05-14 02:38
centos 5 x86_64 184M 2014-05-14 02:37
centos 6 x86 devel 234M 2014-05-14 02:31
centos 6 x86 203M 2014-05-14 02:29
centos 6 x86_64 devel 249M 2014-05-14 02:34
centos 6 x86_64 215M 2014-05-14 02:32
(中略)
ubuntu 12.10 x86_64 137M 2014-05-14 02:19
ubuntu 13.10 x86 141M 2014-05-14 02:20
ubuntu 13.10 x86_64 143M 2014-05-14 02:21
ubuntu 14.04 x86 145M 2014-05-14 02:11
ubuntu 14.04 x86_64 147M 2014-05-14 02:13
----------------------------------------------------------------------------------------------------
note:
'vzn images-available subtypes' to show the list of image subtypes
'vzn images-available beta' to show the list of images that is assigned to beta subtype
こんな感じで、OS一覧がとれます。
コンテナを作ってみよう
コンテナをつくるコマンドは vzn createです。書式はこんな感じ。コンテナIDはOpenVZの許容するコンテナIDとしての数値で指定してください。
vzn create [コンテナID] [ディストロ名(省略時は最新版)] [オプション]
例えば、コンテナID101にcentosの最新版をいれたい場合は、こんな感じです。
vzn create 101 centos
これだけ。OpenVZを多少かじったことのある方ならわかると思いますが、書式が大幅に短縮されているのがわかると思います。
ちなみにコンテナのIPアドレスは、ホストIPを元に機械的に割り当てられますが、それが困るという方もいると思います。そんな時は --ip オプションを使います。
vzn create 101 centos --ip 10.20.10.101
また、ホスト名についても、とくに指定がなければ適当につけられてしまうのですが、--name オプションで明示的に指定することができます。
vzn create 101 centos --name www101.oreore
もし32bitなイメージを使いたい場合、--arch オプションでx86を指定すると実現可能です。
vzn create 101 centos --arch x86
あと、OSバージョンを指定したい(例えばcentos4とかを使いたい!みたいな状況)場合は、
vzn create 101 centos@4
のように、[ディストロ名]@[バージョン]とすればよいです。
コンテナを起動しよう
コンテナを起動するのはとても簡単で、 vzn start コマンドで行います。
vzn start [コンテナIDまたはホスト名]
例えば、コンテナIDが101のコンテナをブートするには、
vzn start 101
とすればできますし、ホスト名がwwwならば
vzn start www
でwwwというコンテナがブートします。
※ (2)に続く