私は最近dockerの学習を始めましたが、手間のかかる作業のほとんどは、名前空間とcgroupを使用してLinuxカーネルによって行われているようです。
私が混乱していると感じているいくつかのことは:
名前空間とcgroupの違いは何ですか?彼らが取り組むさまざまなユースケースは何ですか?
人気を得るために、これらの上にdockerは何を実装しましたか?
これらの機能の内部とその実装方法について知りたいのですが。
私は最近dockerの学習を始めましたが、手間のかかる作業のほとんどは、名前空間とcgroupを使用してLinuxカーネルによって行われているようです。
私が混乱していると感じているいくつかのことは:
名前空間とcgroupの違いは何ですか?彼らが取り組むさまざまなユースケースは何ですか?
人気を得るために、これらの上にdockerは何を実装しましたか?
これらの機能の内部とその実装方法について知りたいのですが。
回答:
これら2つの概念の適切なリンクは、PR14307で修正されています。
内部的には、Dockerは次のコンポーネント上に構築されています。
Linuxカーネルのcgroupと
namespaces
機能
と:
要するに:
詳細については、JérômePetazzoniによる「Anatomyof a Container:Namespaces、cgroups&SomeFilesystemMagic」を参照してください。
Cgroupには、リソースの計測と制限が含まれます。
名前空間は、プロセスにシステムの独自のビューを提供します
複数の名前空間:
chroot
いくつかの名前空間に基づいて?chroot
名前空間に置き換えることはできますか?
chroot
名前空間に置き換えることはできますか?
pivot_root
?(unix.stackexchange.com/a/456777/7490)も参照してくださいgithub.com/vincentbernat/jchroot
cgroupsは、プロセスまたはプロセスのセットが使用できるリソースを制限します。これらのリソースは、CPU、メモリ、ネットワークI / O、またはファイルシステムへのアクセスであり、名前空間は、プロセスのグループの可視性をシステムの残りの部分に制限します。
詳細については、LinuxカーネルのCgroupと名前空間が最新のコンテナを可能にした方法をご覧ください。
Cgroups(コントロールグループ)はリソース管理を行います。
コンテナに与えるホストマシンリソースの量を決定します。
次に例を示します。-dockerでリソースを定義します-次のようなサービスを作成するためのyamlファイルを作成します。
リソース: 制限: CPU: "0.1"(100ミリコア) メモリ:50M
ここで、この例では、これらのリソースを特定のコンテナーに割り当てるようにcgroupに明示的に要求しています。
名前空間:プロセスの分離、コンテナーの完全な分離、個別のファイルシステムを提供します。