独り言

プログラミングの講師をしています。新人研修で扱う技術の解説と個人の技術メモ、技術書の紹介など

【情報処理】仮想化とコンテナの基本

ここでは仮想化とコンテナの基本について説明します。

仮想化とは

クラウドサービスなどでは、サーバーの仮想化の技術が使われています。
仮想化とはどのような技術をさすでしょうか。
一昔前までは、システムを構築する際はサーバーを調達し、1台のサーバーに1つのOSをインストールし、その中にシステムを構築をしていました。
しかし、物理的なサーバーのスペックが高スペックでも、システムが使用するリソースが少ないのであれば、オーバースペックとなります。
そこで、物理的に1つのサーバーに対して複数のOSが稼働できる状態にし、サーバーリソースを効率よく利用できる技術が作られました。
それが仮想化です。
仮想という言葉には「事実上の」という意味があります。
物理的には1台のサーバーでも、事実上複数のサーバーが稼働しているように見えるため、仮想化と呼ばれているのだと思います。
1台のサーバーで複数のOSを動かすだけではなく、逆に1つのOSを複数のサーバーで稼働させることも可能です。

仮想化の分類

仮想化には大きく2つの分類があります。

  • ハイパーバイザー型
  • ホストOS型

の2つです。

ハイパーバイザー型

ハイパーバイザー型のイメージは、ハードウェア上で仮想化ソフト(ハイパーバイザー型のソフト)が稼働し、仮想化ソフト上で複数のOSが稼働しているイメージです。
仮想化ソフト上で動いているOSのことをゲストOS、または仮想マシン(Virtual Machine : VM)と呼びます。
ハイパーバイザー型の仮想化ソフトには

などがあります。
ハイパーバイザー型の仮想化を行う場合、OSと通信する際に仮想化ソフトを中継する必要があるため、ハードウェア上に直接OSをインストールするよりもパフォーマンスは落ちます。
しかし、その分リソースを有効活用できたり、バックアップが用意になったり、ハードウェアに障害があった場合に仮想化ソフトを通じて別のハードウェアに移動できるなど、様々なメリットがあります。
クラウドのIaaSで使用されている技術です。

ホストOS型

ホストOS型は、OS上に仮想化ソフトをインストールし、そのソフトの上で別のOSを動作させます。
例としてはWindows上に仮想化ソフトをインストールし、その仮想化ソフト上でLinuxOSを動作させる。
あるいは、Mac OS上に仮想化ソフトをインストールし、その仮想化ソフト上でWindowsを動作させる、などです。
この時、仮想化ソフトをインストールするOSのことをホストOS、仮想化ソフト上で動作するOSのことをゲストOS、または仮想マシン(Virtual Machine : VM)と呼びます。

ホストOS型の仮想化ソフトには

などがあります。
ホストOS型の場合、仮想マシンはホストOSのリソースの中で動作するため、その分パフォーマンスは悪くなります。
また、ホストOSに障害があった場合には仮想マシンも動作しなくなります。
そういった点から、ホストOS型の仮想化はサーバーの運用形態としては使用されません。
ただ、ファイルをコピーするだけで新しい仮想マシンを作成することができるため、開発環境を構築する際などによく利用されています。

コンテナ

仮想化の技術によって、サーバーのリソースを活用できるようになりましたが、同じOSが複数存在する場合も少なくありません。
そうなった場合、複数のOSを動かす分だけリソースが無駄に動いていることになります。
そこで、1つのOSの中で独立したアプリケーションの実行環境を作ることができる技術が登場しました。
それがコンテナです。
コンテナはDocker社が開発しているDockerが有名です。
開発環境、アプリケーションの実行環境を作る際に便利なツールで、クラウドのPaaSでも利用されています。