最近、Docker を学び始めましたが、大変な作業のほとんどは、名前空間と cgroup を使用して Linux カーネルによって実行されるようです。
私が混乱している点は次のとおりです:
名前空間と cgroup の違いは何ですか? それぞれが対応する異なるユースケースは何ですか?
人気を得るために、Docker はこれらに加えて何を実装しましたか?
これらの機能の内部とその実装方法を知りたいです。
ベストアンサー1
これら2つの概念の適切なリンクは、14307 印刷:
内部的には、Docker は次のコンポーネントに基づいて構築されています。
のcグループそして
namespaces
Linuxカーネルの機能
と:
- cグループコントロール グループは、タスクのセットとその将来のすべての子を、特殊な動作を持つ階層型グループに集約/分割するためのメカニズムを提供します。
- 名前空間: グローバル システム リソースを抽象化でラップし、名前空間内のプロセスに、グローバル リソースの独自の分離されたインスタンスがあるように見せます。
要するに:
- Cグループ= 使用できる量を制限します。
- 名前空間= 表示できるもの(つまり使用できるもの)を制限します
詳細は「コンテナの解剖: 名前空間、cgroup、ファイルシステムの魔法" によるジェローム・ペタゾーニ。
Cgroup にはリソースの計測と制限が含まれます。
- メモリ
- CPU
- ブロックI/O
- 通信網
名前空間はプロセスにシステムの独自のビューを提供します
複数の名前空間:
- ピッド
- ネット
- メートル
- uts
- ipc
- ユーザー:ユーザーそれはdocker 1.10 の実験段階からの卒業
(デーモンインスタンスごとにコンテナ ルートを非特権ユーザーに再マッピングする処理が進行中です:12648 印刷: そのデザイン)