(container-runtime-environment)= # コンテナ実行環境 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 ドキュメントは{doc}`dev-incus`を参照してください。 ## マウント 以下のマウントがデフォルトでセットアップされます。 - `/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 を通してオーバーライドされます。 古いカーネルでは`/sys/fs/cgroup`の仮想バージョンも LXCFS によりセットアップされるかもしれません。 ## 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 が起動される前に閉じられます。