名前空間と cgroups(コンテナの基盤)
コンテナの「軽い隔離」は、Linux カーネルの名前空間(見える範囲の隔離)と cgroups(使える資源の制限)という2つの機能で実現されています。
- 1.コンテナは仮想マシンと違い、ホストのカーネルを共有したまま隔離する軽量な仕組みです。
- 2.名前空間はプロセスから見える範囲(PID・ネットワーク・ファイルなど)を区切ります。
- 3.cgroups は CPU やメモリなど、使える資源の量を制限・計測します。
コンテナはなぜ「軽い」のか
仮想マシン(VM)は、ハードウェアを丸ごと仮想化し、その上に ゲスト OS のカーネルを丸ごと 動かします。隔離は強い反面、OS が重なるぶん 重く・起動も遅い です。
一方コンテナは、ホストのカーネルをそのまま共有 したまま、プロセスを隔離します。新しい OS を起動しないので 軽く・速い。この「軽い隔離」を実現しているのが、Linux カーネルの2つの機能——名前空間(namespaces) と cgroups です。
| 観点 | 仮想マシン | コンテナ |
|---|---|---|
| カーネル | ゲストごとに別 | ホストと共有 |
| 隔離の強さ | 強い | 中(カーネル共有のぶん弱い) |
| 起動の速さ | 遅い(OS 起動) | 速い(プロセス起動) |
| 資源の重さ | 重い | 軽い |
役割を一言で分けると、名前空間が「何が見えるか」を、cgroups が「どれだけ使えるか」を担う と覚えると整理できます。
名前空間:見える範囲を区切る
名前空間 は、プロセスから見える OS 資源を 区画ごとに分離 する仕組みです。同じカーネル上で動いていても、別の名前空間に属するプロセスからは互いが見えません。
主な種類は次のとおりです。
- PID 名前空間:プロセス番号を分離。コンテナ内では自分が PID 1 に見える。
- ネットワーク名前空間:独自の IP アドレス・ポート・ルーティングを持つ。
- マウント名前空間:見えるファイルシステムの構成を分離する。
- UTS 名前空間:ホスト名を独自に持てる。
- ユーザー名前空間:コンテナ内の root を、ホストでは一般ユーザーに対応づける。
- IPC 名前空間:共有メモリなどの IPC 資源を分離する。
これらを組み合わせることで、コンテナ内のプロセスは 「自分専用の OS にいる」かのような景色 を得ます。実体はホスト上の1プロセスにすぎません。
cgroups:使える資源を制限する
名前空間は 見える範囲 を区切りますが、使える量 までは制限しません。それを担うのが cgroups(control groups) です。
cgroups は、プロセスのグループ単位で資源の 割り当て・制限・計測 を行います。
- CPU:使用できる CPU 時間の割合や上限
- メモリ:使用できる上限(超えると制限・強制終了の対象)
- ディスク I/O:読み書きの帯域
- デバイス:アクセスできるデバイスの制御
これにより、1つのコンテナが暴走して ホスト全体の資源を食い尽くす 事態を防げます。「このコンテナは CPU 0.5 個分、メモリ 512MB まで」といった制限は、cgroups が支えています。
名前空間 = 隔離(見える範囲)、cgroups = 制限(使える量)。この2軸が独立していることが、コンテナ理解の核心です。片方だけでは「隔離されているが資源無制限」あるいは「制限はあるが丸見え」になってしまいます。
カーネル共有ゆえの注意点
コンテナはホストのカーネルを共有するため、カーネルレベルでは完全には分離されていません。VM のような強固な境界はなく、カーネルの脆弱性を突かれると、隔離を越えてホストや他コンテナに影響が及ぶ可能性があります。
そのため、信頼できないコードを動かす場面では、ユーザー名前空間で root 権限を弱める、不要なシステムコールを制限する(seccomp)、追加の分離層を挟む、といった対策が併用されます。
コンテナの隔離は軽量さとのトレードオフです。マルチテナントで強い分離が必要なら、VM や、より隔離の強い実行基盤の併用を検討します。軽さと隔離強度は両立しにくい点を忘れないようにしましょう。
まとめ
- コンテナは ホストのカーネルを共有 したまま隔離する、VM より 軽量 な仕組み。
- 名前空間 が「見える範囲(PID・ネットワーク・ファイル等)」を隔離する。
- cgroups が「使える資源(CPU・メモリ等)」を制限・計測する。
- カーネルを共有するため、強い分離が要る用途では追加対策や VM を検討する。
プロセスの基礎は プロセスとスレッド、隔離の前提となる権限分離は カーネルモードとユーザーモード も合わせてどうぞ。
OS Article
名前空間と cgroups(コンテナの基盤)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンテナ
比較で見る軸
難易度: advanced / カテゴリ: OS / タグ数: 4
導入後に効く点
名前空間はプロセスから見える範囲(PID・ネットワーク・ファイルなど)を区切ります。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- OS
- タグ数
- 4
判断チェックリスト
- 自社の用途が「コンテナ / 名前空間」に近いか確認する。
- 強みである「コンテナは仮想マシンと違い、ホストのカーネルを共有したまま隔離する軽量な仕組みです。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。