LXC
2016/5/7更新
対応バージョン: 2.0
LXC 2.0のコンテナを作成して各種管理を行う手順を示す。導入OSはUbuntu 16.04とする。
尚、LXC 1.0での手順は以下を参照のこと。
関連資料・記事
LXCインストール
# apt install lxc
テンプレートは以下が用意されている。
# ls /usr/share/lxc/templates lxc-alpine lxc-centos lxc-fedora lxc-oracle lxc-sshd lxc-altlinux lxc-cirros lxc-gentoo lxc-plamo lxc-ubuntu lxc-archlinux lxc-debian lxc-openmandriva lxc-slackware lxc-ubuntu-cloud lxc-busybox lxc-download lxc-opensuse lxc-sparclinux
コンテナ作成から起動、削除まで
コンテナ作成
ここではUbuntuのテンプレートを使ってc1という名前のコンテナを作成する。
# lxc-create -t ubuntu -n c1
コンテナは以下の場所に格納される。
/var/lib/lxc/<コンテナ名>/
コンテナのルートファイルシステムは以下に作成され、bin、devなどひと通りのディレクトリ構成が作成される。
/var/lib/lxc/<コンテナ名>/rootfs
# ls /var/lib/lxc/c1/rootfs/ bin/ dev/ home/ lib64/ mnt/ proc/ run/ srv/ tmp/ var/ boot/ etc/ lib/ media/ opt/ root/ sbin/ sys/ usr/
容量にして335MB程度となる。
# du -sh /var/lib/lxc/c1/rootfs 335M /var/lib/lxc/c1/rootfs
またコンテナ全体の設定は以下のファイルで行う。
/var/lib/lxc/<コンテナ名>/config
コンテナ起動
コンテナが作成できたら起動する。-dオプションを付けることによってデーモンモードで起動する。
# lxc-start -n c1 -d
コンテナに接続するにはlxc-consoleを使用する。デフォルトのユーザはubuntu(パスワードも同じ)である。
# lxc-console -n c1
コンテナから抜けるにはCtrl + aを入力し、続いてqを入力する。
コンテナ終了
コンテナを終了させるにはlxc-stopを使用する。
# lxc-stop -n c1
コンテナ削除
コンテナを削除するにはlxc-destroyを使用する。
# lxc-destroy -n c1
コンテナ情報出力
コンテナの情報はlxc-lsやlxc-infoで確認できる。
# lxc-ls c1 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 RUNNING 0 - 10.0.3.45 - # lxc-info -n c1 Name: c1 State: RUNNING PID: 6077 IP: 10.0.3.45 CPU use: 0.21 seconds BlkIO use: 4.00 KiB Memory use: 12.89 MiB KMem use: 0 bytes Link: vethBNRV8T TX bytes: 1.34 KiB RX bytes: 914 bytes Total bytes: 2.23 KiB
topコマンドのような統計情報を表示するにはlxc-topを使用する。
# lxc-top Container CPU CPU CPU BlkIO Mem Name Used Sys User Total Used c1 0.22 0.12 0.07 4.00 KB 12.63 MB TOTAL 1 of 1 0.22 0.12 0.07 4.00 KB 12.63 MB
コンテナの状態を監視するにはlxc-monitorを使用する。
# lxc-monitor
例えば起動しているコンテナを停止(lxc-stop -n c1)すると以下のような出力が得られる。
# lxc-monitor 'c1' changed state to [STOPPING] 'c1' changed state to [STOPPED]
コンテナ内のプログラム実行
外部からコンテナ内のプログラムを実行するにはlxc-consoleでコンソール接続してもよいが単純に一つのプログラムを実行するだけならlxc-executeを使用すればよい。
しかもコンテナを起動している必要もなく(起動しているとエラーになる)、実行速度も申し分ない。
# lxc-execute -n c1 -- uname -n c1
コンテナ管理
コンテナのクローン作成
既存のコンテナをコピーしてクローンを作る場合lxc-copyを使用する(かつてのlxc-cloneの置き換え)。コピー元のコンテナは停止している必要がある。
# lxc-stop -n c1 # lxc-copy -n c1 -N c2 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 STOPPED 0 - - - c2 STOPPED 0 - - -
コンテナ内のプロセス制御
コンテナ内のプロセスを全て凍結するにはlxc-freezeを、凍結を解除するにはlxc-unfreezeをそれぞれ使用する。
# lxc-start -n c1 # lxc-freeze -n c1 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 FROZEN 0 - 10.0.3.45 - c2 STOPPED 0 - - - # lxc-unfreeze -n c1 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 RUNNING 0 - 10.0.3.45 - c2 STOPPED 0 - - -
コンテナのスナップショット管理
コンテナのスナップショットを取得したりリストアするにはlxc-snapshotを使用する。スナップショットを取得するにはコンテナが停止している必要がある。
# lxc-stop -n c1 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 STOPPED 0 - - - c2 STOPPED 0 - - - # lxc-snapshot -n c1
取得したスナップショットはsnapXとして/var/lib/lxc/<コンテナ名>/snaps配下に格納される。-Lオプションで一覧が参照できる。
# lxc-snapshot -n c1 -L snap0 (/var/lib/lxc/c1/snaps) 2016:05:07 20:18:33 # lxc-snapshot -n c1 # lxc-snapshot -n c1 # lxc-snapshot -n c1 -L snap0 (/var/lib/lxc/c1/snaps) 2016:05:07 20:18:33 snap1 (/var/lib/lxc/c1/snaps) 2016:05:07 20:19:12 snap2 (/var/lib/lxc/c1/snaps) 2016:05:07 20:19:44
複数あるスナップショットのうち特定の時点にリストアしたい場合は-rオプションとともにスナップショット名を指定する。
# lxc-snapshot -n c1 -r snap1
スナップショットをリストアしても削除はされないので削除したい場合は-dオプションでスナップショット名を指定して明示的に削除する。
# lxc-snapshot -n c1 -d snap0 # lxc-snapshot -n c1 -d snap1 # lxc-snapshot -n c1 -d snap2 # lxc-snapshot -n c1 -L No snapshots
その他にも様々なコマンドがあるがここでは割愛する。詳しくは公式サイトを参照のこと。
LXCコマンドManページ (Linux Containers)
参考サイト
LXCドキュメント (Linux Containers)
LXC技術情報 (Qiita)
2014/6/12更新
対応バージョン: 1.0
LXC 1.0のコンテナを作成してコンソール接続するまでの一連の手順を示す。
尚、LXC 2.0での手順は以下を参照のこと。
関連資料・記事
準備
導入OS
Ubuntu 14.04
インストール
% sudo apt-get install lxc
コンテナ作成
ここでは"c1"という名前のUbuntuのコンテナを作る。
% sudo lxc-create -t ubuntu -n c1
/var/cache/lxc/trusty/rootfs-amd64配下のファイルが/var/lib/lxc/c1/rootfsにコピーされ、そこがコンテナのルートファイルシステムになる。
コンテナの起動
先ほど作ったコンテナ"c1"を-d(デーモンモード)で起動する。
% sudo lxc-start -n c1 -d
動作状況を確認する。コンテナのIPアドレスはDHCPで割り当てられている。
% sudo lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------ c1 RUNNING 10.0.3.167 - NO
コンソール接続
作成したコンテナ名と同じアカウント(パスワードも同じ)が作成されているのでコンソール接続する(切断はCtrl + a, q)。
(lxc-consoleを使う場合)
% sudo lxc-console -n c1 c1 login: ubuntu Password: ******
(sshを使う場合)
% sudo lxc-info -n c1 Name: c1 State: RUNNING PID: 4326 IP: 10.0.3.167 CPU use: 1.04 seconds BlkIO use: 400.00 KiB Memory use: 10.39 MiB KMem use: 0 bytes Link: vethUC142S TX bytes: 11.10 KiB RX bytes: 20.82 KiB Total bytes: 31.92 KiB % ssh ubuntu@<lxc-infoで表示されたIPアドレス> Password: ******
コンソール接続したらコンテナ内の環境であることを確認する。
ubuntu@c1:~$ hostname c1 ubuntu@c1:~$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 6: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:16:3e:63:5d:ff brd ff:ff:ff:ff:ff:ff inet 10.0.3.167/24 brd 10.0.3.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::216:3eff:fe63:5dff/64 scope link valid_lft forever preferred_lft forever
コンテナのシャットダウン
コンテナ内でshutdownを実行するか、コンテナを起動したホスト上でlsx-stopを実行する。
% sudo lxc-stop -n c1 % sudo lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------ c1 STOPPED - - NO
コンテナ制御
OS起動時のコンテナ自動起動設定
コンテナの設定は/var/lib/lxc/c1/configに格納されるので以下の設定を変更する。
lxc.start.auto = 0|1
0(自動起動しない)
1(自動起動する)
lxc.start.delay = n
このコンテナが起動したあと次のコンテナが起動するまでに待つ秒数
自動起動を有効にするとlxc-lsでAUTOSTARTがYESになっているのが確認できる。
% sudo lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------ c1 STOPPED - - YES
ここでもう一つコンテナを作り、こちらは自動起動しないデフォルトの設定のままにしておく。
% sudo lxc-create -t ubuntu -n c2 % sudo lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------ c1 STOPPED - - YES c2 STOPPED - - NO
この状態でlxc-autostartを実行すると自動起動設定になっている"c1"のみが起動する。
% sudo lxc-autostart -a % sudo lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------ c1 RUNNING 10.0.3.157 - YES c2 STOPPED - - NO
コンテナの削除
lxc-destroyを実行する。
% sudo lxc-destroy -n c2 % sudo lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------ c1 RUNNING 10.0.3.157 - YES
コンテナの凍結
コンテナが使用するリソース(プロセスやメモリ空間)などを保持したまま一時的に使用を停止したい場合はコンテナを凍結させることができる。
% sudo lxc-freeze -n c1 % sudo lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ----------------------------------------- c1 FROZEN 10.0.3.157 - YES % sudo lxc-unfreeze -n c1 % sudo lxc-ls --fancy NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------ c1 RUNNING 10.0.3.157 - YES