私はDinDが単にホストドッカーデーモンを使用するためのトリックであるという印象を受けましたが、最近これは本当ではなく、実際には入れ子になったコンテナ化という内容を読んでいました。
私はそのメカニズム、つまりLinuxがネームスペース、cgroupボリューム、およびネットワーキングの観点から階層を管理する方法に興味があります。どのシステムコールも関連しています。
よろしくお願いします:)
答え1
名前空間とはcgroup
本質的に階層的です。
ネームスペース:各ネームスペースは、そのタイプのルートネームスペースまたは親ネームスペースを持ちます。プロセスはシステムコールCLONE_NEW*
のフラグを使用するclone
か、システムコールを使用してunshare
現在の名前空間の子になる新しい名前空間を作成できます。unshare
このプログラムを使用してシステムコールを使用できますunshare
。とても簡単です。
cgroup
cgroup
s:新しい名前空間が作成されていなくても、各名前空間はルートまたは親名前空間を持つcgroup
ため、それ自体は階層的です。すべての親の制限は子供に適用されます。子プロセスの下のすべてのプロセスも親プロセスに属します。cgroup
cgroup
cgroup
cgroup
cgroup
cgroup
cgroup
ファイルシステムが階層的であり、あるファイルシステムが別のファイルシステムのディレクトリ内にマウントできるため、ネストされたボリュームが可能です。新しい名前空間を使用すると、ホストファイルシステムがゲストから隠されますmount
。名前空間がネストされる可能性があるため、ネストできます。
net
ネットワーキングは、ネストされる可能性がある名前空間によって処理されます。
これらの多くは、ルートネームスペースの機能を必要とします。これは、フラグを使用してコンテナを実行することによって--privileged
達成できます。