きっかけ
- @gosukenator さんのブログで Ukigumo と serverspec で Puppet の継続的インテグレーションや puppet-lxc-test-box のエントリを読んで、そもそも LXC って何?と思ったことがきっかけ。
LXC とは
- Linux カーネルの Control Group や Namespace という機能を使って、ホスト OS とは隔離された環境を作るツール
- 実態は chroot 環境
- カーネルをそのまま使うため高速起動、終了が動作する
- 特に基盤自体はハードウェアなサーバーでも仮想サーバーでも構築することが出来る
- こんなイメージかなと...
手順
テンプレートのダウンロード
テンプレートは /usr/share/lxc/templates/ 以下に保存されている
sudo wget -O /usr/share/lxc/templates/lxc-centos \ https://gist.github.com/raw/3514296/b5c055108b4019fae8ea4fff4c58edda46ffe079/lxc-centos
テンプレートの権限修正
cd /usr/share/lxc/templates/ sudo chmod 755 lxc-centos
テンプレートの修正
ダウンロードしたテンプレートをそのまま使うと
Failed to download centos release rpm
となり CentOS のリリース RPM のダウンロードに失敗してしまう。
以下のようにとりあえず直書きして修正。
RELEASE_URL="http://mirror.fairway.ne.jp/centos/6.4/os/x86_64/Packages/centos-release-6-4.el6.centos.10.x86_64.rpm"
curl と yum のインストール
sudo apt-get install curl yum
コンテナを作成
sudo lxc-create -t centos -n inokappa
コンテナを起動
sudo lxc-start -n inokappa
コンテナにログイン
ユーザー名:root、パスワード:password にてログイン
コンテナの日付を調整
cp -rf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
一応、ネットワークの疎通確認
既に IP も設定されており、外部へのアクセスも可能。
ホスト OS からコンテナへの疎通確認
コンテナの IP アドレスに対して ssh でアクセスすることも可能。
コンテナの停止
sudo lxc-stop -n inokappa
まとめ
- 知らないことが多すぎると反省...
- とは言え、意外に簡単にインストールが出来た
- 起動や停止はとても速くて驚いた
- ホスト OS からコンテナへの通信はデフォルト許可されていた
- lxc-shutdown ではコンテナをシャットダウン出来なかったのではなぜだろう...