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

第24回 LXCの構築・活用[10]─ フック(2)

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

前回説明したように,lxc-start-ephemeralコマンドはLXCの持つフック機能をコンテナの準備と後始末に利用していました。lxc-start-ephemeralコマンドが使っていたフックは3つだけでしたが,それ以外にもいろいろな場面でフックが実行できるようになっています。

今回は,前回紹介できなかったフックを紹介しながら,もう少しフックについて詳しくみていきましょう。

フックの仕様

LXCで使用できるフックの一覧を表1に示します。

表1 フックの一覧

フック(設定項目) 説明 実行される名前空間
lxc.hook.pre-start コンテナのTTY,コンソールの作成,マウントが実行される前に実行 ホスト
lxc.hook.pre-mount コンテナのrootfsがマウントされる前に実行 コンテナ
lxc.hook.mount マウントが完了後,pivot_root前に実行 コンテナ
lxc.hook.autodev lxc.autodev=1の場合,lxc.hook.mountが実行された後,pivot_rootの前に実行 コンテナ
lxc.hook.start コンテナのinitが実行される直前に実行 コンテナ
lxc.hook.post-stop コンテナがシャットダウンされた後に実行 ホスト
lxc.hook.clone 新しいコンテナにクローンされる際に実行 コンテナ

lxc.hook.clone以外は,コンテナが起動してから終了するまでのある時点で実行されます。

コンテナのフックが実行される際に,コマンドライン引数として以下の値が順に渡されます。この引数をフックとして指定したプログラムから使用できます。

  1. コンテナ名
  2. セクション(常に'lxc')
  3. フックのタイプ
  4. 追加の引数(クローン時のみ)

またフック実行時には表2の環境変数が設定されます。

表2 フック実行時に設定される環境変数

環境変数 内容
LXC_NAME コンテナ名
LXC_ROOTFS_MOUNT rootファイルシステムをマウントする/したパス
LXC_CONFIG_FILE コンテナ設定ファイルのパス
LXC_SRC_NAME クローン時,元のコンテナの名前
LXC_ROOTFS_PATH lxc.rootfsの値

コンテナのルートファイルシステムのマウント処理

ここで,LXCがコンテナを起動する際にルートファイルシステムをどのように準備するかにふれておきましょう。これはフックが実行される際に設定される環境変数LXC_ROOTFS_MOUNTに関係します。

コンテナのルートファイルシステムは,コンテナの設定ファイル中でlxc.rootfsにより設定されます。Ubuntuの場合,デフォルトだとlxc.rootfsの値は/var/lib/lxc/(コンテナ名)/rootfsとなります。

しかし,コンテナを起動する際にはこのパスを直接使うわけではなく,lxc.rootfsを別のディレクトリにバインドマウントします。このrootfsをマウントするディレクトリはlxc.rootfs.mountに設定されたディレクトリが使われます。このlxc.rootfs.mountの値がフックでLXC_ROOTFS_MOUNTという環境変数で参照できます。

前回説明したlxc.hook.pre-mountは,このマウント処理が行われる前に実行されます。

lxc.rootfs.mountは特に設定しなければコンパイル時のデフォルト値が使われます。Ubuntuのx86_64環境の場合は/usr/lib/x86_64-linux-gnu/lxcです。

このマウントが済んだ後に,pivot_rootシステムコールによりルートファイルシステムが変更され,コンテナのルートファイルシステムが設定されます。

lxc.hook.mountlxc.hook.autodevは,マウント処理が済んだ後,pivot_rootによりルートファイルシステムが変更される前に実行されます。


それではコンテナを開始する前,終了した後,クローン時のフックで引数や環境変数がどのように渡っているのかを簡単に見てみましょう。

著者プロフィール

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

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

Plamo Linuxメンテナ。ファーストサーバ株式会社所属。

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

コメント

コメントの記入