技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

コンテナ

Dockerに代表されるコンテナ型仮想化は、
1つのOS環境に、コンテナと呼ばれる分離された空間を作成し、コンテナごとに異なるOS環境(version)を実現します。

コンテナは、あくまで一つのOSの上に成り立っているため、物理マシン上で一般的な「OSブート手順」を行いません。このため、オーバーヘッドはほぼなく、コンテナの起動・停止は非常に高速で、ものの数秒で完了します。

コンテナにおける空間の分離に大きな役割を果たすのが、
Namespace(名前空間)とcgroupsという資源管理の仕組みです。
Namespaceは、アプリケーションのプロセス単位での分離を実現します。これは、ある空間が、異なる空間でのプロセスを参照することができない、といった制御も実現します。プロセスだけでなく、ファイルシステムへのアクセスの分離も同様です。
cgroupsは、Namespaceごとに、CPUやメモリ、ストレージ、ネットワークなどのハードウェア資源を割り当てます。
この資源管理の仕組みによって、複数のコンテナはプロセスとして稼働するため、各空間に必要とされる資源が少なくてすみます。その上、あくまで単一のOS内で成り立っていて、アプリケーションのプロセスの実行は、そのホストOSから直接行われるため、コンテナ上のCPU利用は、ホストOSと同等の性能を発揮します。

このように開発や運用におけるストレスが少ないコンテナは、開発や運用時における様々な要求や変化への対応スピードを高めてくれる技術です。


thinkit.co.jp