前回以来、
この間に、
さて、
今回からはLXC 1.
LXC 1.
1.
それではLXCが提供するコマンドで、
今回の実行例はUbuntu 15.
lxc-startのデフォルト動作の変更
この変更については、
1.lxc-start
コマンドを使ってコンテナを起動させると、
動作確認を行う際などを除いて、-d
オプションの指定を忘れてしまい、
そこで1.lxc-start
はバックグラウンド起動がデフォルトとなり、-d
を付けなくても良くなりました。逆にフォアグラウンドで起動させる場合は-F
オプションを使います。1.-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.lxc-start
を使い、-F
オプションを付けておくと良いでしょう。
アプリケーションコンテナ環境の構築が楽に
LXCでアプリケーションコンテナを実行する方法については第10回で説明しました。
そこで紹介した通り、lxc-execute
コマンドを使うと便利です。しかし、lxc-execute
コマンドを使う場合は、init.
コマンドをコンテナ内に準備する必要があり少し不便です。init.
コマンドをコンテナ内にコピーするかバインドマウントをすれば良いものの、init.
はダイナミックリンクされており、
1.lxc.
が準備され、lxc.
が見つからない場合は、lxc.
がコンテナ内にバインドマウントされます。このため、lxc.
を準備する必要はなくなり、lxc-execute
を実行すれば良くなりました。ファイル名が少し変わって、init.
、init.
となっています。
以下はinit.
を準備していないコンテナにインストールされた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.
というスタティックリンクされたファイルが存在しています。そしてコンテナ内の/proc/
を見ると、init.
がマウントされていることが確認できます。
全コンテナをまとめて起動
lxc-autostart
コマンドは第25回で紹介した、lxc.
を指定してグループ分けができます。
おさらいのためにUbuntu 14.
"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.-A
オプションが新設され、lxc.
の指定を無視できるようになりました。以下のように-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
上記の例では、
lxc-topコマンドのバイナリ化
1.lxc-top
コマンドが、
luaで書かれていたためか、lxc-top
コマンドはパッケージでLXCを入れてもインストールされませんでした。一方、
$ sudo lxc-top Container CPU CPU CPU BlkIO Mem Name Used Sys User Total Used ct01 0.36 0.23 0.16 0.00 16.09 MB ct02 0.38 0.33 0.15 0.00 16.00 MB ct03 0.37 0.26 0.15 0.00 16.00 MB TOTAL 3 of 3 1.11 0.82 0.46 0.00 48.09 MB
コンテナ作成時にテンプレートの指定が必須に
1.lxc-create
コマンドはコンテナ名を指定することのみが必須で、
1.-t
オプションを指定することが必須となりました。1.-t none
のように指定します。
また1.-t
オプションが必須になりました。空のコンテナを作成する際には-t none
と指定をするのも同じです。
$ sudo lxc-create -t none -n empty $ sudo lxc-ls -f NAME STATE IPV4 IPV6 GROUPS AUTOSTART --------------------------------------------- empty STOPPED - - - NO $ sudo ls -F /var/lib/lxc/empty/ config
以上のようにコンテナディレクトリが作成され、
$ sudo cat /var/lib/lxc/empty/config lxc.network.type=veth lxc.network.link=lxcbr0 lxc.network.flags=up
ただし、-t none
を指定してもエラーになるようです。
lxc-config lxc.cgroup.* の表示
第28回にlxc-config
でcgroup関係のシステム設定が表示されるようになりました。
lxc-start-ephemeral --cdir オプション
第23回で説明した通り、lxc-start-ephemeral
コマンドは既存のコンテナの一時的なコピーを使ってコンテナを作成し、
このコマンドのオプションにホスト上のディレクトリをコンテナ内にバインドマウントするための--bdir
というオプションがありました。
LXC 1.--bdir
に加えて、--cdir
オプションが追加されました。
--bdir
だとホスト上に存在するディレクトリやファイルが直接操作されてしまいます。新しく追加された--cdir
を使うと、
試してみましょう。
$ sudo lxc-ls -f NAME STATE IPV4 IPV6 GROUPS AUTOSTART -------------------------------------------- ct01 STOPPED - - - NO $ touch /home/ubuntu/gihyo-test
lxc-start-ephemeral
コマンドで起動するコンテナの元となるコンテナを作成します。そしてホスト上に/home/
というファイルを作りました。準備ができたので一時的なコンテナを起動しましょう。
$ sudo lxc-start-ephemeral -o ct01 --cdir /home -d -k setting rootfs to .%s. /var/lib/lxc/ct01-9dcya3fq/rootfs The ephemeral container is now started. You can enter it from the command line with: lxc-console -n ct01-9dcya3fq The following IP addresses have be found in the container: - 10.0.3.169
上記の例のように--cdir /home
と指定して、/home
がコンテナ内でも見えるようにしています。起動したところでlxc-attach
コマンドでコンテナ内に入ってみます。
$ sudo lxc-attach -n ct01-9dcya3fq root@ct01-9dcya3fq:~# cat /proc/mounts | grep overlay none / overlay rw,relatime,lowerdir=/var/lib/lxc/ct01/rootfs,upperdir=/var/lib/lxc/ct01-9dcya3fq/tmpfs/delta0,workdir=/var/lib/lxc/ct01-9dcya3fq/tmpfs/work0 0 0 none /home overlay rw,relatime,lowerdir=/home,upperdir=/var/lib/lxc/ct01-9dcya3fq/tmpfs/delta1,workdir=/var/lib/lxc/ct01-9dcya3fq/tmpfs/work1 0 0
コンテナ内で/proc/
を確認してみると、/
がoverlayfsでマウントされている以外に、--cdir /home
で指定した通り/home
がoverlayfsでマウントされていることがわかります。
コンテナ内の/home
を、/home
を使い、delta1
というディレクトリを使い、work1
を使い、
root@ct01-9dcya3fq:~# ls /home/ubuntu gihyo-test (ホストの/home/ubuntuの内容が見えている) root@ct01-9dcya3fq:~# touch /home/ubuntu/container (/home/ubuntuにファイルを作成) root@ct01-9dcya3fq:~# ls /home/ubuntu container gihyo-test
コンテナ内で/home/
を見てみると、
ここでホスト上で/home/
を確認してみましょう。
$ ls /home/ubuntu
gihyo-test (ホスト上は元のファイルしかない)
上記のようにコンテナ内で作ったファイルはありません。コンテナ用の上層ディレクトリ内を確認してみると、
$ sudo ls -F /var/lib/lxc/ct01-9dcya3fq/tmpfs/delta1/ubuntu
container (コンテナ内で作成したファイルはoverlayfsのupperdirに作成されている)
まとめ
今回はLXC 1.
次回も引き続きLXC 1.