前回まででLXCに付属しているコマンドの説明が済みましたので、
LXCの設定は2つに分かれます。システムの設定とコンテナの設定です。
- システムの設定
- LXCがシステム全体で共通して使用する値を設定します。コンテナの保存場所やストレージバックエンドの設定などです。
- コンテナの設定
- 各コンテナの動作を決定する設定です。コンテナごとに設定ファイルが存在します。
Ubuntuにおけるシステム設定が書かれたファイルや、
設定ファイルの書式
LXCの設定ファイルの書式はシンプルです。
- 設定は
『設定項目名 = 設定値』 という形式で1行につき1つ設定します ("="の前後のスペースはなくても構いません) - 行頭が "#" で始まる場合、
その行はコメントとなります - 各設定項目名の頭には "lxc." が付きます
以下のように設定行の途中で "#" を記載してコメントは書けません。
設定項目の頭に必ず "lxc." と付けなければいけないのは少し冗長に思えますね。
システムの設定
システムの設定で設定できる項目は前回紹介したlxc-config
コマンドで一覧できます。
このコマンドで設定可能な項目が一覧できるはずなのですが、
- lxc.
cgroup. use - lxc.
cgroup. pattern
現時点のlxc-config
コマンドにはなぜかその設定を確認する実装がされていません
lxc.default_config
lxc.
で指定したファイルの内容は、lxc-create
コマンドを使ってコンテナを作成した場合に、
Ubuntuの場合、lxc.
の値は/etc/
に設定されており、
この設定がlxc-create
で作成したコンテナにコピーされている様子は第8回のlxc-create
を使ったコンテナの作成を説明したところで紹介しました。
ネットワークの設定以外にも作成するコンテナに自動で設定したい項目がある場合はlxc.
で指定されているファイルに記載すると良いでしょう。
lxc.path
lxc.
は第8回で紹介した通り
デフォルト値はコンパイル時に指定した値になります。このパスを変更したい場合は指定すると良いでしょう。
Ubuntu の場合、/var/
となっています。
lxc.cgroup.use
LXCで使用するcgroupのサブシステムを指定します。執筆時点の1.
たとえば以下のように指定すると、
lxc.cgroup.pattern
コンテナを起動する際にcgroupfsに作成するLXCコンテナ用のグループのパターンを指定します。
デフォルトではこの値はlxc/%n
となっています。%n
はコンテナ名に置き換わります。
このデフォルトの設定で、/sys/
にマウントされているときにct01
というコンテナを起動すると/sys/
にct01
用のグループを作成します。
と設定すると、ct01
用のグループは/sys/
に作成されます。
システム設定のうちlxc.
で始まる設定はストレージバックエンドの設定です。これらの設定については、
システム設定の詳細についてはman lxc.
でご覧になれます。
コンテナの設定
システムの設定は、
それに対してコンテナの設定は本格的にコンテナを運用する場合には変更する場合も多いでしょう。こちらは設定項目もかなりの数にのぼります。
コンテナの設定についてはman lxc.
で詳細を調べられます。
lxc-create
でコンテナを作成した際に自動的に作られる設定ファイルやLXCが標準で準備する設定ファイルにある項目から順に見ていきましょう。
設定ファイルのinclude ~lxc.include
lxc.
は文字通り他に準備した設定ファイルをincludeする設定です。LXCは共通で使用する推奨の設定があらかじめ準備されており、lxc-create
ではそれをincludeする設定が作成されます。
Ubuntuコンテナを作成した場合は以下のような設定がなされ、
コンテナのアーキテクチャの設定 ~lxc.arch
lxc.
でコンテナのアーキテクチャを設定します。x86_i686
などと設定します。
コンテナのルートファイルシステム ~lxc.rootfs
コンテナイメージが保存されているルートファイルシステムを指定します。
ストレージバックエンドがディレクトリであるとき、
コンテナのホスト名 ~lxc.utsname
lxc.
でコンテナのホスト名を指定します。コンテナ起動時に新しいUTS名前空間が作成され指定したホスト名が設定されます。
コンテナ内でのマウント
コンテナ内でマウントしたいエントリを指定できます。コンテナ起動時にはマウント名前空間を作成しますので、
マウントを指定するにはエントリを設定ファイル内に書く方法と、
マウントを指定する書式はfstabと同じ形式です。マウントポイントはlxc.
のように書くと、/proc
にprocファイルシステムがマウントされます。
ホストのディレクトリやファイルをバインドマウントしたい場合は、
以上のように指定するとホストの/sys/
がコンテナ内の同じ場所にバインドマウントされます。
各マウントエントリの指定 ~lxc.mount.entry
設定ファイル内でマウントエントリを指定する場合はlxc.
を指定します。複数のマウントを行う場合はこのエントリを繰り返し書きます。
先に紹介したprocファイルシステムをマウントする場合は以下のように書きます。
LXCがインストールするUbuntu用共通設定ファイル/usr/
)
マウントを指定したファイルの読み込み ~lxc.mount
マウントエントリが複数あって設定ファイルから分離したい場合は、lxc.
でそのファイルのホストOS上でのフルパスを指定します。
コンテナ内での自動的なマウント ~lxc.mount.auto
procやsysfsやcgroupといった、lxc.
とlxc.
を使ってマウントするかわりに、lxc.
です。
lxc.
はproc、
proc
、sys
、cgroup
のいずれも、
proc
lxc.
を使ってprocファイルシステムをマウントする場合はproc
、proc:mixed
、proc:rw
のいずれかを指定します。
proc:mixed
またはproc
/proc
が読み書き可能でマウントされます。ただし、/proc/
とsys /proc/
だけが読み込み専用でマウントされます。sysrq-trigger proc:rw
/proc
を読み書き可能でマウントします。
sys
lxc.
を使ってsysfsをマウントするには、sys
、sys:ro
、sys:rw
のいずれかを指定します。
sys:ro
またはsys
/sys
は読み込み専用でマウントされます。sys:rw
/sys
を読み書き可能でマウントします。
cgroup
cgroupに関する指定をすると、/sys/
以下に自身に関係するcgroupfsが現れます。
lxc.
でcgroupを指定する場合、cgroup
と指定するか、cgroup-full
と指定するかによって、
cgroup:mixed
は/sys/
をtmpfsでマウントし、
たとえば、lxc.
という設定で起動した場合、/sys/
は以下のようになります。
cgroup:ro
はcgroup:mixed
と同様にマウントされます。しかしすべてのディレクトリが読み込み専用となります。
cgroup:rw
はcgroup:ro
と逆にすべてのディレクトリが読み書き可能となります。ただし、
cgroup
のようにオプションの指定がない場合は、cgroup:rw
と同じに、cgroup:mixed
と同じになります。
cgroup-full:mixed
はcgroup:mixed
と違って、
たとえば、lxc.
という設定で起動した場合は以下のようになります。
cgroup-full:ro
はcgroup-full:mixed
と同様にマウントされますが、
cgroup-full:rw
はcgroup-full:mixed
と同様にマウントされますが、
cgroup-full
のようにオプションの指定がない場合は、cgroup-full:rw
と同じに、cgroup-full:mixed
と同じになります。
このようにlxc.
によってcgroupのマウントの細かい制御ができます。しかし、/sys/
以下には実際のサブシステムがマウントされていないため、lxc.
を使ってもコンテナ内にcgroupがマウントされません。
端末関連
コンテナにログインする際に使用するコンソールについて設定できます。
コンソール出力 ~lxc.console
コンテナをフォアグラウンドで起動した場合のコンソールを割り当てるデバイスのパスを指定します。通常は指定する必要はあまりないと思います。コンソールを無効にしたい場合は'none'を指定します。
バックグラウンド起動した場合に起動時などのコンソール出力を見たい場合は、lxc-start
の-L
オプションを使えばファイルに保存できます。
LXC 1.lxc.
という設定が新設され、-L
オプションを指定したときと同じことが設定ファイルで指定できるようになります。
使用可能なTTY数 ~lxc.tty
lxc-console
コマンドで接続するコンソールをコンテナ内で作成できる数を指定します。実際にはコンソールはinitから起動されるgettyなどのプログラムが作成しますが、
同様にコンテナで使用できる疑似端末の上限を設定できるlxc.
が存在しますが、
cgroup 関連
cgroupを使ってリソースを制限したい場合はlxc.
に続けてcgroupfs内に存在するファイルの名前をそのまま指定します。ホストOSのカーネルでサポートされていなかったり、
/dev ディレクトリ
LXCはコンテナが起動する際に/dev
以下にfd
、stdin
、stdout
、stderr
を作成しますが、
しかし、lxc.
という設定が存在します。デフォルトは0に設定されていて無効になっていますが、
systemdベースのディストリビューションのコンテナをlxc-create
を使って作成する場合は、
まとめ
今回はLXCのシステム設定とコンテナの設定の一部を紹介しました。次回はセキュリティ関係とネットワーク関係の設定を紹介する予定です。
今回は設定項目を淡々と説明するだけになりましたが、
LXC 1.0.6
9月24日にLXC 1.lxc-start
に新たにフォアグラウンド起動を指定する-F
オプションが新設されました。
1.lxc-start
を呼び出している場合に動きが変わらないように今から準備できるようにするためです。
その他も多数の修正がされています。変更点は公式サイトのNewsにあり、