第226回 LXCで軽量仮想環境の活用:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社を参考にやってみました。
LXCのインストール
$ sudo apt-get update
$ sudo apt-get install lxc
コンテナの作成
コンテナのテンプレートは/usr/lib/lxc/templates/lxc-*というファイルで定義されています。
ここではubuntuのコンテナを作成してみます。マシンスペックにもよりますが10分程度かかります。
$ sudo lxc-create -t ubuntu -n ubuntu01
コンテナ一覧表示
起動状態毎のコンテナ名一覧
$ sudo lxc-list
RUNNING
FROZEN
STOPPED
precise
コンテナ名だけの一覧
$ sudo lxc-ls
precise
コンテナの起動
シリアルコンソールに接続して起動する方法
$ sudo lxc-start -n ubuntu01
起動後ログインプロンプトが出たら、ubuntu / ubuntu でログインします。
ログアウトするとシリアルコンソールのログインプロンプトに戻ります。
ここでシリアルコンソールから抜ける方法は不明です。
シリアルコンソールに接続せずに起動する方法
$ sudo lxc-start -n ubuntu01 -d
起動後シリアルコンソールに接続
$ sudo lxc-console -n ubuntu01
この場合は、Ctrl+a qでシリアルコンソールを抜けられます。
ホストからゲストにssh接続
ホストではdnsmasqが10.0.3.1で動いていて、ゲストはDHCPで動的IPが割り当てられています。以下のコマンドでゲストのIPアドレスを取得します。
$ dig ubuntu01 @10.0.3.1 +short
10.0.3.16
sshで接続
$ ssh ubuntu@10.0.3.6
dnsmasqのネームサーバを最初にする
$ echo "nameserver 10.0.3.1" | sudo sh -c "cat >> /etc/resolvconf/resolv.conf.d/head"
$ sudo resolvconf -u
これでネームサーバを明示的に指定しなくても名前解決できます。
$ dig ubuntu01
CentOS 6.4コンテナを使う
LXC CentOS template. Work with Ubuntu if the yum package is installedを元に適宜調整した
https://github.com/hnakamur/ansible-playbooks/blob/master/roles/lxc/templates/ubuntu_lxc.centos.j2
を/usr/lib/lxc/templates/lxc-centosに配置します。調整内容は以下の2点です。
- /etc/resolv.confはresolvconfの自動生成に任せる。
- /etc/sysconfig/network-scripts/ifcfg-eth0のDHCP_HOSTNAMEはコンテナ名にする。これによりdig ${コンテナ名}で名前解決できるようになります。
あとは、以下のコマンドを実行すればCentOS 6.4のコンテナが作成されます。
$ sudo lxc-create -t centos -n centos01
Ansibleのプレイブック
https://github.com/hnakamur/ansible-playbooks/commit/0aa690d63d86fadc70f58570f244b067542f6974
にUbuntu 12.04にLXCをセットアップするプレイブックを置いています。