賢いということはわかりますが、走ってman namespaces
理解してください。
ネームスペースはグローバルシステムリソースを抽象化してラップするため、ネームスペース内のプロセスは独自に分離されたグローバルリソースインスタンスを持つように見えます。グローバルリソースへの変更は、名前空間のメンバーである他のプロセスには表示されますが、他のプロセスには表示されません。名前空間の用途の1つは、コンテナを実装することです。
「実現せよ」と言ったときコンテナ「、名前空間の分離に加えて、私が何をしているのかを「コンテナ」と呼ぶ必要があるものは何ですか?またはより具体的には、他のユーザーの名前空間unshare
で始まるプログラムを実行すると「コンテナ」になりますか?
答え1
カーネルはコンテナを定義しません。systemd-spawnで作成された「軽量ネームスペースコンテナ」とは何ですか?。一般的に理解されるコンテナは、分離(名前空間を使用)およびリソース制御(cgroupを使用)、およびseccompフィルタなどの追加レベルの保護を提供します。これは、複数の概念を組み合わせてカーネルによって直接提供される一流の概念のインスタンスではありません。
unshare
名前空間の側面を処理するには、残りの部分を追加する必要があります(したがってコンテナランタイムの実装)。
答え2
Linux財団
Linux Foundation でこれの実際の定義を調べると、「コンテナ」は分離レベルや権限制御によって定義されていないようです。「ビルモジュール」——しかし逆に、
- アプリケーション、対応する依存関係、ユーザー空間ライブラリを含むイメージからインスタンス化します。
- ホストカーネルで実行
- 限定的で外部リソースから隔離
だからここで本当の質問はシェルスクリプトが共有解除されているかどうかですunshare
。