LXCで学ぶコンテナ入門 -軽量仮想化環境を実現する技術

第8回 LXCの基本操作[1]

この記事を読むのに必要な時間:およそ 11 分

コンテナの情報表示 ~ lxc-ls, lxc-info

コンテナを作成したところで,コンテナの情報を表示させてみましょう。現在,ホスト上に存在するコンテナの一覧を表示するにはlxc-lsを使います。

$ sudo lxc-ls
ct01      plamo01   ubuntu01

以上のようにコンテナの一覧を表示するだけでなく,コンテナの稼動状態を簡易的に表示できます。

$ sudo lxc-ls --fancy
NAME      STATE    IPV4       IPV6  AUTOSTART
---------------------------------------------
ct01      RUNNING  10.0.3.92  -     NO
plamo01   STOPPED  -          -     NO
ubuntu01  STOPPED  -          -     NO

以上のようにデフォルトではコンテナ名,状態,IPv4アドレス,IPv6アドレス,ホスト起動時の自動起動が設定されているかどうかを表示します。

--fancyオプションで表示させる項目は--fancy-formatオプションにカンマ区切りで表示させたい項目を指定して変更できます。

$ sudo lxc-ls --fancy --fancy-format=name,state,ipv4,ipv6,autostart,pid,memory,ram,swap
NAME      STATE    IPV4       IPV6  AUTOSTART  PID    MEMORY   RAM      SWAP
-----------------------------------------------------------------------------
ct01      RUNNING  10.0.3.92  -     NO         26948  27.98MB  27.98MB  0.0MB
plamo01   STOPPED  -          -     NO         -      -        -        -
ubuntu01  STOPPED  -          -     NO         -      -        -        -

この例では,指定可能な項目名を全て指定してみました。

なお,lxc-ls前回説明した通り,Python3バインディングを使って実装されていますので,Python3がない環境では動かないか,0.8.0まで存在していたシェルスクリプトのlxc-lsがインストールされているかもしれません。

その場合は以上のような詳細な情報の表示はできませんので,以下で説明する単独のコンテナの情報を表示させるlxc-infoというコマンドを使います。こちらはC言語で実装されています。

$ sudo lxc-info -n ct01 
Name:           ct01
State:          RUNNING
PID:            26948
IP:             10.0.3.92
CPU use:        3.22 seconds
BlkIO use:      36.22 MiB
Memory use:     27.98 MiB
KMem use:       0 bytes
Link:           vethJD5M03
 TX bytes:      3.49 KiB
 RX bytes:      3.32 KiB
 Total bytes:   6.81 KiB

lxc-lsより少し表示できる情報が多く,コンテナの設定も表示できます。

$ sudo lxc-info -n ct01 -c lxc.utsname -c lxc.rootfs
lxc.utsname = ct01
lxc.rootfs = /var/lib/lxc/ct01/rootfs

設定を表示させる機能については,LXCの設定ファイルはテキストですから直接見ればよいので,あまり使うことはないかもしれませんね。

なお,lxc.network.*の設定値を表示させる場合は少し使い方に注意が必要です。

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.network.hwaddr = 00:16:3e:54:1f:bd

という設定がある場合,設定ファイルのキーをそのまま指定すると,

$ sudo lxc-info -n ct01 -c lxc.network.flags
lxc.network.flags invalid

となってしまいます。これはコンテナ用に複数のネットワークインターフェースを定義できるためです。上の例でちゃんと値を表示させるためには,

$ sudo lxc-info -n ct01 -c lxc.network.0.flags
lxc.network.0.flags = up

という風にnetworkの後に0から始まる数字を指定しなければいけません。内部の配列の添字をそのまま使っている感じですね。

なお,lxc-infoも1.0より古いバージョンでは表示できる情報が少なく,コンテナの状態とコンテナのinitのPIDが表示できるだけです。

コンテナの情報表示を行うコマンドを2つ紹介しました。筆者は,バックグラウンド実行のコンテナの簡単な動作確認であれば,コンテナ名の指定の要らないlxc-lsをよく使います。

コンテナの起動 ~ lxc-start

コンテナの存在や状態の確認ができるようになったところでいよいよコンテナを起動してみましょう。

連載のこれまでの回で少し紹介したように,コンテナの起動にはlxc-startコマンドを使用します。起動の前に主なオプションを確認しておきましょう。

表4 lxc-startの主なオプション

オプション意味
-d / --daemonデーモンモードで起動
-f / --rcfile設定ファイルの指定
-s / --define設定の指定

-dを付けないと,lxc-startはフォアグラウンドで起動しますので,起動したターミナル上にコンソールが開きます。コンテナ作成直後にコンテナが起動するかどうか確認したい場合はログなどが出力されて便利ですが,実際にコンテナを利用する場合には毎回-dを付けなければいけないので少し不便ですね。

次のバージョン(1.1)ではフォアグラウンド起動用のオプションが新設され,-dのデーモンモードがデフォルトになる予定です。現在のバージョンである1.0系列でも互換性のために-F / --foregroundというオプションが新設される予定です。

デフォルトの場所にある設定ファイル以外の設定ファイルを指定したい場合は-f / --rcfileを指定します。

また,特定の設定値を起動時に設定したい場合は-s / --defineを使用します。このオプションは設定ファイルに同じ設定がある場合でも設定ファイルの値を上書きします。

この他にもオプションがありますので,詳しくはman lxc-startで確認してください。

それでは起動してみましょう。

$ sudo lxc-start -n ct01
<4>init: plymouth-upstart-bridge main process (5) terminated with status 1
<4>init: plymouth-upstart-bridge main process ended, respawning
<4>init: hwclock main process (7) terminated with status 77
<4>init: plymouth-upstart-bridge main process (15) terminated with status 1
<4>init: plymouth-upstart-bridge main process ended, respawning
<4>init: ureadahead main process (8) terminated with status 5
  : (略)

以上のようにフォアグラウンドで起動すると,通常のOS起動時のような出力が表示された後にログインプロンプトが表示されます。

コンテナの起動に問題がある時はLXCのエラーが出力されることがあります。しかし,問題解決に十分な情報がでない場合が多いので詳しくエラーの中身を見たい場合は共通オプションにあったログ出力を指定しましょう。

$ sudo lxc-start -n ct01 -o logfile -l DEBUG

このように起動するとlogfileというファイルにDEBUGレベル以上のログが出力されます。

コンテナが起動することが確認できればバックグラウンドで起動すれば良いでしょうから,-dオプションを付けて起動します。

$ sudo lxc-start -n ct01 -d
$ sudo lxc-ls --fancy
NAME      STATE    IPV4       IPV6  AUTOSTART  
---------------------------------------------
ct01      RUNNING  10.0.3.92  -     NO

著者プロフィール

加藤泰文(かとうやすふみ)

2009年頃にLinuxカーネルのcgroup機能に興味を持って以来,Linuxのコンテナ関連の最新情報を追っかけたり,コンテナの勉強会を開いたりして勉強しています。英語力のない自分用にLXCのmanページを日本語訳していたところ,あっさり本家にマージされてしまい,それ以来日本語訳のパッチを送り続けています。

Plamo Linuxメンテナ

Twitter:@ten_forward
技術系のブログ:http://tenforward.hatenablog.com/