cgroupと名前空間の違い


83

私は最近dockerの学習を始めましたが、手間のかかる作業のほとんどは、名前空間とcgroupを使用してLinuxカーネルによって行われているようです。

私が混乱していると感じているいくつかのことは:

  1. 名前空間とcgroupの違いは何ですか?彼らが取り組むさまざまなユースケースは何ですか?

  2. 人気を得るために、これらの上にdockerは何を実装しましたか?

  3. これらの機能の内部とその実装方法について知りたいのですが。


回答:


104

これら2つの概念の適切なリンクは、PR14307で修正されています

内部的には、Dockerは次のコンポーネント上に構築されています。

Linuxカーネルのcgroupnamespaces機能

と:

  • cgroup:コントロールグループは、タスクのセットとその将来のすべての子を、特殊な動作を持つ階層グループに集約/分割するためのメカニズムを提供します。
  • 名前空間:グローバルシステムリソースを抽象化でラップし、名前空間内のプロセスに、グローバルリソースの独自の分離インスタンスがあるように見せます。

要するに:

  • Cgroups =使用できる量を制限します。
  • 名前空間=表示できるもの(したがって使用できるもの)を制限します

詳細については、JérômePetazzoniによるAnatomyof a Container:Namespaces、cgroups&SomeFilesystemMagic」を参照してください

Cgroupには、リソースの計測と制限が含まれます。

  • 記憶
  • CPU
  • ブロックI / O
  • 通信網

名前空間は、プロセスにシステムの独自のビューを提供します

複数の名前空間:

  • pid
  • ネット
  • mnt
  • uts
  • ipc
  • user:docker 1.10で実験から卒業しているuserns
    (デーモンごとのインスタンスごとのコンテナルートの非特権ユーザーへの再マッピングが進行中です:PR 12648:その設計を参照してください)

ありがとう。されるchrootいくつかの名前空間に基づいて?chroot名前空間に置き換えることはできますか?
ティム

1
いいえ、chrootは名前空間に基づいていません。itnext.io/…を参照してください。ただし、3年以上後、新しいDocker(19.03、まだベータ版)はルートレスとして実行できることに注意してください:github.com/moby/moby/blob/…。:そしてホストネームスペース上のリソースを公開することができgithub.com/moby/moby/pull/38913
VonC

chroot名前空間に置き換えることはできますか?
ティム

1
@Timネイティブではありません。多分とpivot_root?(unix.stackexchange.com/a/456777/7490)も参照してくださいgithub.com/vincentbernat/jchroot
VonC


5

cgroupsは、プロセスまたはプロセスのセットが使用できるリソースを制限します。これらのリソースは、CPU、メモリ、ネットワークI / O、またはファイルシステムへのアクセスであり、名前空間は、プロセスのグループの可視性をシステムの残りの部分に制限します

詳細については、LinuxカーネルのCgroupと名前空間が最新のコンテナを可能にした方法をご覧ください。


2

Cgroups(コントロールグループ)はリソース管理を行います。
コンテナに与えるホストマシンリソースの量を決定します。

次に例を示します。-dockerでリソースを定義します-次のようなサービスを作成するためのyamlファイルを作成します。

リソース:
  制限:
    CPU: "0.1"(100ミリコア)
    メモリ:50M

ここで、この例では、これらのリソースを特定のコンテナーに割り当てるようにcgroupに明示的に要求しています。


名前空間:プロセスの分離、コンテナーの完全な分離、個別のファイルシステムを提供します。


名前空間には6つのタイプがあります
。1。マウントns-ファイルシステム用。
2. UTS(一意のタイムシェアリング)ns-実行中のコンテナーのさまざまなホスト名をチェックし
ます3.
IPCns-プロセス間通信4.ネットワークns-さまざまなコンテナーへのさまざまなIP割り当てを
処理します5.PIDns-プロセスIDの分離
6.ユーザーns-異なるユーザー名(uid)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.