uma3blog

気が向いたことを稀になんかいろいろ書きます。

コンテナと仮想マシンの違い

「コンテナって何?」って聞かれたときにどう答えればよいかがパッと思いつかなかったので、整理のために仮想マシンとの比較で軽くまとめました。

仮想マシンとコンテナの違い

マシン全体を仮想化して、その上で動作するOSやアプリケーションをあたかも実機上で動いているように見せる機構のこと。
実現方法として、ハイパーバイザを用いる仮想化ソフトウェアと用いない仮想化ソフトウェアがある。
ハイパーバイザを用いる仮想化ソフトウェアは、VMwareHyper-Vなどが有名。
ハイパーバイザを用いない仮想化ソフトウェアは、QEMUが有名。
ハイパーバイザは、物理ホストと仮想ホストのCPUアーキテクチャが同一でなければならないため、例えば物理ホストがIntelのCPUなら仮想ホストでARMのCPUを載せることは出来ない。
ホストOS→仮想化ソフトウェア→ゲストOS→プロセスという感じで、プロセス起動までのオーバーヘッドが大きい。

  • コンテナ

OS実行のリソースは不要であるため、仮想マシンに比べてオーバーヘッドが小さい。ホストOS→プロセスと直で動作させられる。

Linuxではnamespaceにより、プロセスやファイルシステムを分割できる。この分割したもの1つ1つがコンテナ。
ただ、このコンテナを実用できるようにするためには、その他にもネットワークなど様々な分割を行わなければならない。そのあたりを一括してやってくれるのがDocker。


コンテナは、仮想化ソフトを使わずゲストOSを立てることもなく、ホストOS上に分割したプロセス空間を作ることが出来る。