Ubuntu で lxc のインストールとテスト実行
lxc コンテナでは,プロセス,ファイルシステム,IPC,ネットワークが仮想化され,ホストや他のコンテナと完全に分離された実行環境を提供します.
参考Webページ
https://help.ubuntu.com/12.04/serverguide/lxc.html
http://www.stgraber.org/2012/05/04/lxc-in-ubuntu-12-04-lts/
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を実施するには, 次のコマンドを実行します.
sudo apt -y update
sudo apt -yV upgrade
sudo /sbin/shutdown -r now
* lxc をパッケージを用いてインストール
Ubuntu でパッケージを用いてインストールする場合の手順
次のコマンドを実行します.
sudo apt -y update
sudo apt -y install debootstrap
sudo apt -y install lxc
sudo apt -y install lxctl
使ってみる
コンテナの生成,複製,破棄,および生成済コンテナの一覧表示
- コンテナの生成
-t オプションでテンプレート名を,-n オプションでコンテナ名を指定します.利用可能なテンプレートは /usr/share/lxc/templates ディレクトリに格納されています.
sudo lxc-create -t ubuntu -n hoge
結果の確認(エラーメッセージが出ないことを確認します)
- コンテナの複製
-o オプションで複製元のコンテナ名を,-n オプションで複製先のコンテナ名を指定します.
sudo lxc-create -o hoge -n hoge2
- コンテナの破棄
sudo lxc-destroy -n hoge
- 生成済のコンテナの一覧表示
lxc-ls
コンテナの起動,終了,および状態表示
- コンテナの起動
sudo lxc-start -n hoge
数十秒ほど待つと,下のようなコンソール画面が表示されます.
ユーザ名 ubuntu,パスワード ubuntu でログインが可能です.
- コンテナのシャットダウン
sudo lxc-shutdown -n hoge
- コンテナの強制終了
sudo lxc-stop -n hoge
- コンテナの状態(起動中かなど)とプロセスIDの確認
sudo lxc-info -n hoge
- リソース使用状況の確認
sudo lxc-cgroup -n hoge memory.usage_in_bytes sudo lxc-cgroup -n hoge memory.memsw.usage_in_bytes
コンソール接続
起動中のコンテナへのコンソール接続
sudo lxc-console -n hoge

コンテナ側に接続された端末での操作
- ログイン
ユーザ名 ubuntu,パスワード ubuntu でログインが可能です.
- コンテナの停止
sudo poweroff
既定(デフォルト)の設定の確認
- ホストでコマンドを実行
sudo lxc-cgroup -n hoge cpuset.cpus sudo lxc-cgroup -n hoge memory.limit_in_bytes sudo lxc-cgroup -n hoge memory.memsw.limit_in_bytes
- コンテナ側でコマンドを実行
sudo ifconfig -a
以上の実行結果から,次の設定値が確認できます.
コンテナの仮想NIC (veth) 名 (コンテナ内部から識別される名前) | eth0 |
コンテナで利用可能な CPU コア数 (cpuset.cpus) | 0-8 |
コンテナで利用可能な メモリ使用量の上限 (memory.limit_in_bytes) | 0-8 |
ブリッジ接続
ifconfig -a
これらは,インターネットプロバイダから指定されたアドレスであったり, ブロードバンドルータの設定値であったりします.
ホストで「sudo apt -y install bridge-utils」を実行します.
sudo apt -y update
sudo apt -y install bridge-utils
- /etc/network/interfaces に「br0」の設定を追記
現在ホストが使用している inet アドレス(IP アドレス), ネットワーク・アドレス, ネット・マスク, ブロードキャスト・アドレス, ゲートウエイの IP アドレス (デフォルト・ルータの IP アドレス), DNS サーバの IP アドレスを そのまま記述します.
◆ 設定例
inet アドレス(IP アドレス) 192.168.111.21 ネットワーク・アドレス 192.168.111.0 ネット・マスク 255.255.255.0 ブロードキャスト・アドレス 192.168.111.255 ゲートウエイの IP アドレス (デフォルト・ルータの IP アドレス) 192.168.111.1 DNS サーバの IP アドレス 192.168.111.1 ◆ 追記の例
auto br0 iface br0 inet static address 192.168.111.21 network 192.168.111.0 netmask 255.255.255.0 broadcast 192.168.111.255 gateway 192.168.111.1 dns-nameservers 192.168.111.1 bridge_ports eth0 bridge_stp off bridge_maxwait 1 auto eth0 iface eth0 inet static address 0.0.0.0
- 再起動
sudo /etc/init.d/networking restart
- 「ifconfig -a」で設定を確認
br0 が追加されていることを確認します.
- ufw の設定
設定ファイル /etc/default/ufw の DEFAULT_FORWARD_POLICY の行を,
DEFAULT_FORWARD_POLICY="ACCEPT"
のように書き換え,「sudo service ufw restart」を実行します.
- (オプション)ホストで「sudo apt -y install dnsmas」を実行
- lxc 設定ファイルの作成
◆ lxc 設定ファイルの例
lxc.utsname = hoge2 lxc.network.type=veth lxc.network.link=br0 lxc.network.flags=up lxc.network.name=eth0 lxc.network.ipv4=192.168.111.22/24
- lxc 設定ファイルを用いたコンテナの作成
◆ コマンドの例
-t オプションでテンプレート名を,-n オプションでコンテナ名を,-f オプションで lxc 設定ファイルのファイル名を指定します.
sudo lxc-create -t ubuntu -n hoge2 -f lxc-veth.conf
- 使ってみる
ホストで次のように操作します.
sudo lxc-start -n hoge2
数十秒待つとコンソールが開きます.外部に ssh のポート(番号22番)が開放されているため,セキュリティ対策としてパスワードを変更しておきます.
その後,ホストから次のコマンドを実行して,lxc コンテナ上の ssh サーバへの接続をテストします.
ssh ubuntu@<設定したIPアドレス>
ログインが確認できたら,セキュリティ対策として lxc-shutdown で速やかにコンテナを停止し,lxc-destroy で削除するか,適切なセキュリティ設定を実施します.