前回以来,
この間に,
さて,
今回からはLXC 1.1を取り上げて,
LXC 1.1は2015年1月末に1.1.0がリリースされ,
1.1で大きな新機能や改良が一段落し,
それではLXCが提供するコマンドで,
今回の実行例はUbuntu 15.04上にインストールしたLXC 1.1.2を使用しています。
lxc-startのデフォルト動作の変更
この変更については,
1.0系ではlxc-startコマンドを使ってコンテナを起動させると,
動作確認を行う際などを除いて,-dオプションの指定を忘れてしまい,
そこで1.1系ではlxc-startはバックグラウンド起動がデフォルトとなり,-dを付けなくても良くなりました。逆にフォアグラウンドで起動させる場合は-Fオプションを使います。1.0系でも,-Fオプションが新設されました。
$ lxc-start --version 1.1.2 $ sudo lxc-start -n ct01 $ sudo lxc-ls -f NAME STATE IPV4 IPV6 GROUPS AUTOSTART -------------------------------------------------- ct01 RUNNING 10.0.3.169 - - NO
以上のようにオプションを指定しない場合,
1.0系を使っていて,lxc-startを使い,-Fオプションを付けておくと良いでしょう。
アプリケーションコンテナ環境の構築が楽に
LXCでアプリケーションコンテナを実行する方法については第10回で説明しました。
そこで紹介した通り,lxc-executeコマンドを使うと便利です。しかし,lxc-executeコマンドを使う場合は,init.lxcコマンドをコンテナ内に準備する必要があり少し不便です。init.lxcコマンドをコンテナ内にコピーするかバインドマウントをすれば良いものの,init.lxcはダイナミックリンクされており,
1.1では,lxc.initが準備され,lxc.initが見つからない場合は,lxc.initがコンテナ内にバインドマウントされます。このため,lxc.initを準備する必要はなくなり,lxc-executeを実行すれば良くなりました。ファイル名が少し変わって,init.lxc,init.lxc.staticとなっています。
以下はinit.lxcを準備していないコンテナにインストールされたApacheを起動しています。
$ sudo lxc-execute -n ct02 -- /usr/sbin/apache2ctl start & [1] 12505 $ sudo lxc-ls -f ct02 NAME STATE IPV4 IPV6 GROUPS AUTOSTART -------------------------------------------- ct02 RUNNING - - - NO $ sudo lxc-attach -n ct02 -- ls -F / (/にinit.lxc.staticというファイルが存在する) bin/ dev/ home/ lib/ media/ opt/ root/ sbin/ sys/ usr/ boot/ etc/ init.lxc.static* lib64/ mnt/ proc/ run/ srv/ tmp/ var/ $ sudo lxc-attach -n ct02 -- file /init.lxc.static /init.lxc.static: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=ca82d892e89cb8f0e4fa60ad57b973172290e823, stripped (init.lxc.staticファイルはスタティックリンクであることを確認) $ sudo lxc-attach -n ct02 -- cat /proc/mounts | grep init.lxc /dev/mapper/vivid--vg-root /init.lxc.static ext4 rw,relatime,errors=remount-ro,data=ordered 0 0 (マウントされていることを確認)
コンテナ内のルートディレクトリを見るとinit.lxc.staticというスタティックリンクされたファイルが存在しています。そしてコンテナ内の/proc/を見ると,init.lxc.staticがマウントされていることが確認できます。
全コンテナをまとめて起動
lxc-autostartコマンドは第25回で紹介した,lxc.groupを指定してグループ分けができます。
おさらいのためにUbuntu 14.04 LTS上の1.0.7で実行した例を見てみましょう。
"test"グループに設定されているコンテナを,
$ sudo lxc-ls -f NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------- ct01 STOPPED - - YES (test) ct02 STOPPED - - YES (test) ct03 STOPPED - - YES $ sudo lxc-autostart -g test $ sudo lxc-ls -f NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------- ct01 RUNNING 10.0.3.228 - YES (test) ct02 RUNNING 10.0.3.166 - YES (test) ct03 STOPPED - - YES
この場合,-aオプションを使いました。
$ sudo lxc-ls -f NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------- ct01 STOPPED - - YES (test) ct02 STOPPED - - YES ct03 STOPPED - - NO $ sudo lxc-autostart -a $ sudo lxc-ls -f NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------------- ct01 RUNNING 10.0.3.228 - YES (test) ct02 RUNNING 10.0.3.166 - YES ct03 STOPPED - - NO
以上のように,
1.1では,-Aオプションが新設され,lxc.start.autoの指定を無視できるようになりました。以下のように-aオプションと組み合わせて,
$ sudo lxc-ls -f NAME STATE IPV4 IPV6 GROUPS AUTOSTART -------------------------------------------- ct01 STOPPED - - test BY-GROUP ct02 STOPPED - - - YES ct03 STOPPED - - - NO $ sudo lxc-autostart -a -A $ sudo lxc-ls -f NAME STATE IPV4 IPV6 GROUPS AUTOSTART -------------------------------------------------- ct01 RUNNING 10.0.3.185 - test BY-GROUP ct02 RUNNING 10.0.3.224 - - YES ct03 RUNNING 10.0.3.242 - - NO
以上のように,
また,lxc-lsコマンドが表示するグループと自動起動の表示が分離して見やすくなっていますね。
lxc-lsの新しい出力項目
前述のようにlxc-lsに"GROUPS"というカラムが新設された以外に,
以下のように--fancy-formatオプションに"interfaces"というキーワードが指定できるようになりました。コンテナ内のネットワークインターフェースを一覧できます。
$ sudo lxc-ls --fancy --fancy-format=name,state,ipv4,interfaces NAME STATE IPV4 INTERFACES --------------------------------------------------------- ct01 RUNNING 10.0.3.185 eth0, lo ct02 RUNNING 10.0.3.224 eth0, lo ct03 RUNNING 10.0.3.242, 10.200.200.239 eth0, eth1, lo
上記の例では,