コンテナー実行環境

LXD は実行するコンテナーに一貫性のある環境を提供しようとします。

正確な環境はカーネルの機能やユーザーの設定によって若干異なりますが、それ以外は 全てのコンテナーに対して同一です。

PID1

LXD は何であれ /sbin/init に置かれているものをコンテナーの初期プロセス (PID 1) として起動します。 このバイナリは親が変更されたプロセス (訳注: ゾンビプロセスなど) の処理を含めて適切な init システムとして振る舞う必要があります。

LXD がコンテナーの PID1 とコミュニケーションするのは以下の2つのシグナルだけです。

  • SIGINT コンテナーのリブートをトリガーする
  • SIGPWR (かあるいは SIGRTMIN+3) コンテナーのクリーンなシャットダウンをトリガーする

PID1 の初期環境は container=lxc 以外は空です。 init システムは container=lxc をランタイムを検出する (訳注: lxc で動いていることを知る) ために使用できます。

デフォルトの 3 個 (訳注: stdin, stdout, stderr) より上の全てのファイルディスクリプタは PID1 が起動される前に閉じられます。

ファイルシステム

LXD は使用するどのイメージから生成する新規のコンテナーは少なくとも以下のファイルシステムを 含むことを前提とします。

  • /dev (空のディレクトリ)
  • /proc (空のディレクトリ)
  • /sbin/init (実行ファイル)
  • /sys (空のディレクトリ)

デバイス

LXD のコンテナーは tmpfs ファイルシステムをベースとする最低限で一時的な /dev を 持ちます。これは tmpfs であって devtmpfs ではないので、デバイスノードは手動で作成 されたときのみ現れます。

デバイスノードの標準セットでは以下のデバイスがセットアップされます。

  • /dev/console
  • /dev/fd
  • /dev/full
  • /dev/log
  • /dev/null
  • /dev/ptmx
  • /dev/random
  • /dev/stdin
  • /dev/stderr
  • /dev/stdout
  • /dev/tty
  • /dev/urandom
  • /dev/zero

標準セットのデバイスに加えて、以下のデバイスも利便性のためにセットアップされます。

  • /dev/fuse
  • /dev/net/tun
  • /dev/mqueue

マウント

LXD では以下のマウントがデフォルトでセットアップされます。

  • /proc (proc)
  • /sys (sysfs)
  • /sys/fs/cgroup/* (cgroupfs) (cgroup namespace サポートを欠くカーネルの場合のみ)

以下のパスがホスト上に存在する場合は自動的にマウントされます。

  • /proc/sys/fs/binfmt_misc
  • /sys/firmware/efi/efivars
  • /sys/fs/fuse/connections
  • /sys/fs/pstore
  • /sys/kernel/debug
  • /sys/kernel/security

これらを引き渡す理由は、これらがマウントされているか、コンテナー内でマウント できるようになっているかが必要とされているレガシーな init システムのためです。

これらのほとんどは非特権コンテナー内からは書き込み可能ではなく (あるいは読み取り可能 ですらなく)、特権コンテナー内では LXD の AppArmor ポリシーによってブロックされます。

ネットワーク

LXD コンテナーはネットワークデバイスをいくつでもアタッチできます。 これらの名前はユーザーにオーバーライドされない限りは ethX で X は 連番です。

コンテナーからホストへのコミュニケーション

LXD は /dev/lxd/sock にソケットをセットアップし、コンテナー内の root ユーザーはこれを使ってホストの LXD とコミュニケーションできます。

API は ここにドキュメント化されています.

LXCFS

ホストに LXCFS がある場合は、コンテナー用に自動的にセットアップされます。

これは通常いくつかの /proc ファイルになり、それらは bind mount を通してオーバーライド されます。古いカーネルでは /sys/fs/cgroup の仮想バージョンも LXCFS によりセットアップ されるかもしれません。