LinuCレベル2 コンテナ 問12
コンテナ/コンテナの仕組みコンテナ内でpsを実行すると、アプリケーションのプロセスがPID 1として表示された。一方、ホストでpsを実行すると同じプロセスは別のPIDで表示された。この理由の説明として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル2の出題範囲「コンテナ」に対応。実際の試験問題ではありません)
- APID名前空間によってコンテナ内に独立したPIDの番号体系が作られ、ホストからは別の番号で見えている
- Bコンテナごとに別のLinuxカーネルが起動しており、そのカーネルが最初に起動したプロセスがPID 1になる
- Ccgroupsがコンテナ内のプロセスのPIDを書き換え、リソース制限の単位ごとに1から番号を振り直している
- Dchrootでルートディレクトリを変更すると/procの内容が切り替わり、PIDの番号も1から振り直される
正解:A
解説
PID名前空間は、プロセスIDの番号体系を分離する名前空間です。新しいPID名前空間で最初に起動したプロセスはその中でPID 1となり、親の名前空間(ホスト)からは通常のPIDで見えます。コンテナ内のPID 1はinitと同じく、孤児プロセスの回収やシグナルの扱いに特別な責任を持つため、docker run --initのように小さなinitを挟むこともあります。
選択肢ごとの解説
- A正しい。PID名前空間で番号体系が分かれるため、同じプロセスがコンテナ内とホストで別のPIDになります。
- B誤り。コンテナはホストのカーネルを共有しており、コンテナごとにカーネルが起動するわけではありません。
- C誤り。cgroupsはCPUやメモリ等のリソース使用量を制限・計測する仕組みで、PIDの番号を変えるものではありません。
- D誤り。chrootはルートディレクトリを変えるだけで、PIDの番号体系は分離しません。