8
9

More than 5 years have passed since last update.

Ubuntu 12.04でLXCを使う

Posted at

第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をセットアップするプレイブックを置いています。

8
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9