2012年6月8日金曜日

Ubuntu 12.04 で LXC

Ubuntu 12.04 では、コンテナ (LXC) が簡単に扱えます。

インストール

$ sudo apt-get install lxc


基本事項
  • lxc-* コマンドの多くは、-n オプションでコンテナ名を指定します。
  • テンプレートは、"/usr/lib/lxc/templates/lxc-テンプレート名" にある。(Ubuntu 12.04 LTS)
  • テンプレートは、"/usr/share/lxc/templates/lxc-テンプレート名" にある。(Ubuntu 12.10)
  • コンテナの設定は、"/var/lib/lxc/コンテナ名/config" 以下に保存される。
  • ファイルシステムは、"/var/lib/lxc/コンテナ名/rootfs" 以下に保存される。
  • コンテナ作成時に使用するキャッシュ イメージは、 "/var/cache/lxc" 以下に保存される。

lxc-* コマンド
  • lxc-create コマンドのヘルプを表示
    $ lxc-create -t TEMPLATE -h
        ※ テンプレート名は、ubuntu, fedora, debian 等
  • コンテナの作成 (Ubuntu ホストと同じリリース, Login: ubuntu/ubuntu)
    $ sudo lxc-create -t ubuntu -n CONTAINER
  • コンテナの作成 (Ubuntu Lucid,  Login: ubuntu/ubuntu)
    $ sudo lxc-create -t ubuntu -n CONTAINER -- -r lucid
  • ubuntu テンプレートでキャッシュ イメージ を再作成するには、-F オプションを使用
    $ sudo lxc-create -t ubuntu -n CONTAINER -- -F
  • コンテナの作成 (Fedora, Login: root/root)
    $sudo apt-get install yum (yum コマンドが必要)
    $ sudo lxc-create -t fedora -n CONTAINER
  • コンテナの作成 (Debian, Login: root/root)
    $ sudo lxc-create -t debian -n CONTAINER
  • コンテナの一覧
    $ sudo lxc-list
  • コンテナの起動
    $ sudo lxc-start -n CONTAINER [-d]
        -d オプション指定でコンソールに接続しない
  • コンテナの起動 (設定 /var/lib/lxc/CONTAINER/config の上書き)
    $ sudo lxc-start -n CONTAINER -s lxc.network.link=br0
        -s KEY=VALUE で上書き (例では、lxc.network.link を br0)
  • コンソールに接続 (Ctrl-a q で切断)
    $ sudo lxc-console -n CONTAINER
  • コンテナの再起動
    $ sudo lxc-shutdown -n CONTAINER -r
  • コンテナの停止
    $ sudo lxc-shutdown -n CONTAINER
  • コンテナの強制終了
    $ sudo lxc-stop -n CONTAINER
  • コンテナの削除
    $ sudo lxc-destroy -n CONTAINER
  • コンテナのバックアップ (バックアップ番号 = 1)
    $ sudo lxc-backup CONTAINER 1
        ※ "/var/lib/lxc/CONTAINER/rootfs.backup#" にバックアップされる
  • バックアップからのリストア (バックアップ番号 = 1)
    $ sudo lxc-restore CONTAINER 1
  •  ホスト起動・停止時にコンテナを自動起動・停止する設定
    $ sudo ln -s /var/lib/lxc/CONTAINER/config /etc/lxc/auto/CONTAINER.conf


ネットワーク

"/etc/default/lxc" でデフォルトで作成されるブリッジ インタフェース (lxcbr0) の設定がされています。
"/usr/share/doc/lxc/examples/lxc-*.conf" にネットワーク設定の例があります。
コンテナの設定 "/var/lib/lxc/コンテナ名/config" を例を参考に変更してネットワーク設定を変更できます。
デフォルトの状態では、コンテナの eth0 は、ブリッジ インタフェース (lxcbr0) とブリッジ接続します。

外部とコンテナとが直接通信するためには、ホストにブリッジ インタフェース (br0) を作り、ホストの物理インタフェース (eth0) をブリッジに参加させます。そして、br0 とコンテナの eth0 をブリッジ接続します。

VMware ESXi で動作している仮想マシンで LXC を使用する場合の注意点として、コンテナへ直接接続できるようにするためには、仮想スイッチかポート グループ レベルでの無差別モードを有効にする必要があります。

以下の例では、ホストにブリッジ インタフェース (br0) を作り、ホストの物理インタフェース eth0 をブリッジに参加させます。コンテナは br0 とブリッジ接続するようにします。これで、ホストの物理インタフェース eth0 が接続するネットワーク セグメントにコンテナの eth0 が直接接続する形態になります。


■ ブリッジ br0 の設定
$ sudo vi /etc/network/interfaces

$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
  address 192.168.0.101
  netmask 255.255.255.0
  gateway 192.168.0.254
  dns-nameservers 8.8.8.8 8.8.4.4
  bridge_ports eth0
  bridge_stp off

■ ネットワーク設定を反映
$ sudo service networking restart

■ 既存のコンテナの設定を変更
$ sudo sed -i /var/lib/lxc/CONTAINER/config -e 's/=lxcbr0$/=br0/'

■ 新規に作成するコンテナの設定を変更
$ sudo sed -i -e 's/^\(lxc.network.link=\).*/#&\n\1br0/' /etc/lxc/lxc.conf

■ 起動時に lxcbr0 を作成しない設定
$ sudo sed -i -e 's/^\(USE_LXC_BRIDGE=\).*/#&\n\1"false"/' /etc/default/lxc


参考

1 件のコメント:

KEDARUMA さんのコメント...

xubuntu12.10では
/usr/share/lxc/templates/