LXC - Linux Containers = VMWareやVirtualBoxみたいにホストカーネル上で別OSのカーネルを起動する仮想マシンではなく、Linuxカーネルのcgroupsという機能を利用して、ホストカーネル上で、仮想OSのプロセスとネットワークを動作させる仮想環境。起動するカーネルはホストOSのカーネルのみなので、動作も軽量。
そんな最近話題のLXCでUbuntu 12.04LTS(ホスト)上でCentOSが動く環境作ってみた。
LXCのインストール
$ sudo apt-get install lxc debootstrap bridge-utils
yumと依存ライブラリのインストール
$ sudo apt-get install librpm2 librpmbuild2 librpmio2 librpmsign0 libsqlite0 python-rpm python-sqlite python-sqlitecachec python-support python-urlgrabber rpm rpm-common rpm2cpio yum debootstrap bridge-utils
lxc-contosテンプレートの入手
https://gist.github.com/hagix9/3514296
を/usr/lib/lxc/templates/に配置し、実行権限を付加する。
$ cd /usr/lib/lxc/tempaltes $ sudo wget https://gist.github.com/hagix9/3514296/raw/7f6bb4e291fad1dad59a49a5c02f78642bb99a45/lxc-centos .. $ sudo chmod +x lxc-centos
ただ、このままのテンプレートだとCentOSのRPMのダウンロードに失敗(404が発生)するので、170行目のRELEASE_URLを↓のように修正する。
RELEASE_URL="$MIRROR_URL/Packages/centos-release-$release-$releaseminor.el6.centos.10.$arch.rpm" ↓ RELEASE_URL="http://mirror.fairway.ne.jp/centos/6.4/os/i386/Packages/centos-release-6-4.el6.centos.10.i686.rpm"
※↑のURLだと32bit版になるので64bit版の場合は→(http://mirror.fairway.ne.jp/centos/6.4/os/x86_64/Packages/centos-release-6-4.el6.centos.10.x86_64.rpm)
CentOSのコンテナを作成
$ sudo lxc-create -n lxc-centos01 -t centos
コンテナを起動
$ sudo lxc-start -n lxc-centos01
起動すると↓なターミナルが表示される。
ログインアカウントはroot/password(passwordはlxc-centosのテンプレートに記載されてるものが適用される。デフォルトのままだとpassword)
LXCコンテナのrootファイルシステムは、/var/lib/lxc/テンプレート名/rootfs(↑であれば/var/lib/lxc/lxc-centos01/rootfs)に確保されるみたい。
コンテナの停止
$ sudo lxc-stop -n lxc-centos01
LXC Web Panel
↑のようにLXCの操作はコマンドラインで行なってきたけど、LXC Web Panelを使うとこれらの操作をブラウザででき、稼働中のコンテナの可視化などができる。インストールは簡単でrootユーザで以下のコマンドを実行するだけ。
$ wget http://lxc-webpanel.github.io/tools/install.sh -O - | bash
インストールが終わるとhttp://localhost:5000にLXC Web Panelが起動する↓
初期はadmin/adminでログインでき、コンテナの状態の確認や操作、設定変更ができるようになってて便利。
Web Panelの起動・停止はそれぞれ、
$ sudo service lwp start $ sudo service lwp stop
で可能。
いやー、ホント軽い。意外と簡単に環境構築できるのとLXC Web Panelみたいな管理ツールもあって便利なので、今後はVirtualBoxとか使う機会も減ってLXCメインになると思う。
特にChefのレシピを書いて動作検証するのに結構な時間がかかってたので、Chefの動作検証用の環境はEC2とかVirtualBoxとかじゃなくて軽量なLXCの方がかなり効率良い。fgrehm/vagrant-lxc · GitHubとか良さげ。