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)