dindの基本メカニズム(dockerのdocker)

dindの基本メカニズム(dockerのdocker)

私はDinDが単にホストドッカーデーモンを使用するためのトリックであるという印象を受けましたが、最近これは本当ではなく、実際には入れ子になったコンテナ化という内容を読んでいました。

私はそのメカニズム、つまりLinuxがネームスペース、cgroupボリューム、およびネットワーキングの観点から階層を管理する方法に興味があります。どのシステムコールも関連しています。

よろしくお願いします:)

ベストアンサー1

名前空間とはcgroup本質的に階層的です。

ネームスペース:各ネームスペースは、そのタイプのルートネームスペースまたは親ネームスペースを持ちます。プロセスはシステムコールCLONE_NEW*のフラグを使用するcloneか、システムコールを使用してunshare現在の名前空間の子になる新しい名前空間を作成できます。unshareこのプログラムを使用してシステムコールを使用できますunshare。とても簡単です。

cgroupcgroups:新しい名前空間が作成されていなくても、各名前空間はルートまたは親名前空間を持つcgroupため、それ自体は階層的です。すべての親の制限は子供に適用されます。子プロセスの下のすべてのプロセスも親プロセスに属します。cgroupcgroupcgroupcgroupcgroupcgroupcgroup

ファイルシステムが階層的であり、あるファイルシステムが別のファイルシステムのディレクトリ内にマウントできるため、ネストされたボリュームが可能です。新しい名前空間を使用すると、ホストファイルシステムがゲストから隠されますmount。名前空間がネストされる可能性があるため、ネストできます。

netネットワーキングは、ネストされる可能性がある名前空間によって処理されます。

これらの多くは、ルートネームスペースの機能を必要とします。これは、フラグを使用してコンテナを実行することによって--privileged達成できます。

おすすめ記事