コンテナ実行環境¶
Incus は実行するすべてのコンテナに一貫性のある環境を提供しようとします。
正確な環境はカーネルの機能やユーザーの設定によって若干異なりますが、それ以外はすべてのコンテナに対して同一です。
ファイルシステム¶
Incus は使用するどのイメージから生成する新規のコンテナは少なくとも以下のルートレベルのディレクトリーが存在することを前提とします:
/dev(空のディレクトリー)/proc(空のディレクトリー)/sbin/init(実行ファイル)/sys(空のディレクトリー)
デバイス¶
Incus のコンテナは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
ネットワーク¶
Incus コンテナはネットワークデバイスをいくつでもアタッチできます。
これらの名前はユーザーにオーバーライドされない限りはethXでXは連番です。
コンテナからホストへのコミュニケーション¶
Incus は/dev/incus/sockにソケットをセットアップし、コンテナ内の root ユーザーはこれを使ってホストの Incus とコミュニケーションできます。
API ドキュメントはインスタンス〜ホスト間の通信を参照してください。
マウント¶
以下のマウントがデフォルトでセットアップされます。
/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 システムのためです。
これらのパスほとんどは非特権コンテナ内からは書き込み可能ではなく(あるいは読み取り可能ですらなく)、特権コンテナ内では AppArmor ポリシーによってブロックされます。
LXCFS¶
ホストに LXCFS がある場合は、コンテナ用に自動的にセットアップされます。
これは通常いくつかの/procファイルになり、それらは bind mount を通してオーバーライドされます。
PID1¶
Incus は何であれ/sbin/initに置かれているものをコンテナの初期プロセス(PID 1)として起動します。
このバイナリは親が変更されたプロセス(訳注: ゾンビプロセスなど)の処理を含めて適切な init システムとして振る舞う必要があります。
Incus がコンテナの PID1 とコミュニケーションするのは以下の 2 つのシグナルだけです。
SIGINTコンテナのリブートをトリガーするSIGPWR(あるいはSIGRTMIN+3)コンテナのクリーンなシャットダウンをトリガーする
PID1 の初期環境はcontainer=lxc以外は空です。
init システムはcontainer=lxcをランタイムの検出(訳注: lxc で動いていることを知る)に使用できます。
デフォルトの 3 個(訳注: stdin, stdout, stderr)より上のすべてのファイルディスクリプターは PID1 が起動される前に閉じられます。