Develop with pleasure!

福岡でCloudとかBlockchainとか。

LXC使ってUbuntu上でCentOSを動かしてみた。

LXC - Linux ContainersVMWareVirtualBoxみたいにホストカーネル上で別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

起動すると↓なターミナルが表示される。
f:id:techmedia-think:20131202114617p:plain,w300

ログインアカウントは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が起動する↓

f:id:techmedia-think:20131202115530p:plain,w400

初期はadmin/adminでログインでき、コンテナの状態の確認や操作、設定変更ができるようになってて便利。

f:id:techmedia-think:20131202115715p:plain,w600

Web Panelの起動・停止はそれぞれ、

$ sudo service lwp start
$ sudo service lwp stop

で可能。

いやー、ホント軽い。意外と簡単に環境構築できるのとLXC Web Panelみたいな管理ツールもあって便利なので、今後はVirtualBoxとか使う機会も減ってLXCメインになると思う。
特にChefのレシピを書いて動作検証するのに結構な時間がかかってたので、Chefの動作検証用の環境はEC2とかVirtualBoxとかじゃなくて軽量なLXCの方がかなり効率良い。fgrehm/vagrant-lxc · GitHubとか良さげ。