🌕

コンテナを支える3つの技術 (Namespace, cgroup, Capability)

2023/02/03に公開

Namespace

ハイパーバイザー型仮想化における「物理サーバ」と「仮想サーバ」は、それぞれが1つの「サーバ環境」として位置づけられています。

しかし、コンテナ型仮想化では、1つのコンテナは「1つのプロセス」として扱われています。

各プロセスに対して、それぞれのシステムリソースを、他のプロセスと分離しているのがNamespaceという機能。

この機能によって、たとえば、コンテナAとコンテナBという2つのコンテナがあり、それぞれのコンテナ内に全く同じファイルZというものがあったとしても、「コンテナAのファイルZ」、「コンテナBのファイルZ」として管理されます。

このように、Namespaceによって、それぞれのコンテナが相互に隔離され、お互いに干渉せずに稼働させることが可能です。

cgroup

作業中にパソコンの動作が重くなるのを防いでくれるのがcgroupです。

動作が重くなる原因は、特定のプロセスに高い負荷がかかっていることによって、ホストOSに影響を与えているから。

cgroupの役割は、プロセスをグループ化して、CPUやメモリなど、ホストOSの物理的なリソースを分離し、プロセスが用いるCPUの使用率やメモリの割り当てや、デバイスへのアクセスを制御すること。

これにより、特定のプロセスがCPUやメモリリソースを大量に消費することを防ぎ、ホストOSやほかのプロセスに影響が出るといったリスクを抑えています。

Capability

Capabilityは、root権限を細かく分けて、プロセスやファイルに設定する機能です。

Capabilityがないとどうなるかというと、実行しているプログラムに脆弱性があった場合、rootユーザは動作するプロセスは全ての権限を持っているので、他のプロセスやホストOSそのものに影響を与えてしまうことに。

これを防ぐために、Capabilityはrootが持っている権限をバラし、rootの持つすべての権限を付与せずに、必要な権限のみを付与できるようにしたものです。

Discussion