前提
- 物理サーバー:ホストOSがインストールされている物理的なサーバー
- ホストOS:物理サーバーにインストールされているOS(一般的なPCでいうWindows OS や Mac OS等)
- ハイパーバイザー:仮想サーバー(VM)を作成/実行するソフトウェア
- 仮想サーバー(VM):物理サーバーの余剰リソースを使用して作成されるサーバーおよび仮想環境
- ゲストOS:仮想サーバー上にインストールされているOS
仮想化
仮想化はソフトウェアの開発で使用される手法であり、一つの物理サーバーの上で「仮想的に」サーバーを構築するという技術を指します。
Windows PC上でのWebアプリケーション開発を例に挙げると、Webアプリとして「Webサーバー」「アプリケーションサーバー」「DBサーバー」が必要になりますが、これらのサーバーを物理的に用意するのではなく一つの物理サーバー(Windows)上で仮想的に(WebサーバーやDBサーバーを)構築するようなイメージです。
専用のサーバーを用意する必要がないため、サーバーの費用や電力、物理的なスペースなどのコストを削減できることがメリットになります。
仮想化技術の種類
仮想化技術には主に
- ハイパーバイザー型(タイプ1ハイパーバイザー)
- ホスト型(タイプ2ハイパーバイザー)
- コンテナ型
の3種類が存在し、次項でそれぞれの違いを見ていきます。
ハイパーバイザー型
ハイパーバイザー型は、ハイパーバイザーが物理サーバー上で直接動作し、その上に仮想サーバーを構築します。
- ホストOSを必要とせず、本来役割を担っているホストOSの代わりにハイパーバイザーがハードウェアを直接制御するため、仮想マシンのパフォーマンスが上がる
- 複数の仮想マシンを効率よく稼働させるための仕組みがある
- 例:Microsoft Hyper-V, VMWare ESX-i, Linux KVM

ホスト型
ホスト型 は、ホストOSのソフトウェアとしてハイパーバイザー(等の仮想化ソフトウェア)が実行され、その上に仮想サーバーを構築します。
- ホストOSの上にソフトウェアとしてインストールして使用するため、設定がシンプル
- ハードウェアへのアクセスはホストOSを経由して行われるため、余計なオーバーヘッドがかかる
- ホストOSは仮想マシンに対してハードウェアリソースの割り当て管理をしているため、仮想マシンが増えるとホストOSの負荷が懸念される
- 仮想マシンごとに、ホストOSとは異なるゲストOSをインストールできる
- 一般的なデスクトップOS上で動作するため、個々の環境でテストや開発がしやすい
- 例:Oracle VM VirtualBox, VMware Palyer, VMWare Fusion

コンテナ型
コンテナ型の場合はゲストOSを必要とせず「仮想マシン/仮想サーバー」を構築しないため、ホスト型・ハイパーバイザー型とは全く異なる概念となります。
OSの機能はホストOSに依存しているため、そのホストOS(Linuxカーネル等)が利用するアプリケーションを実行するための環境をコンテナごとに管理し、コンテナは「コンテナエンジン」というソフトウェアで動作します。
そのためコンテナはあくまでもアプリケーションを実行する役割となり、サーバーの中核機能(OSの機能)はホストOSへ任せることになります。

- ゲストOSが不要であるコンテナではホストOSのカーネルを共有して動作するが、各コンテナには必要なライブラリやバイナリ等(bin/lib)のユーザー空間が含まれ、これがアプリケーションの実行に必要な最低限のOSコンポーネントを提供する。そのためOSのコア機能(カーネル)はホストOSに依存し、独立したユーザー空間だけがコンテナごとに用意される(Docker Engineを実行する場合、WindowsではWSL2、MacではLinuxKitがホストOSにあたる)
- ホストOSのみで動作するため、リソースの消費量が少なく動作速度も速い
- ホスト型やハイパーバイザー型のように、ホストOSと異なるOSを持つ仮想マシンを稼働させることができない
- 例:Docker, Kubernetes, LXC(Linux Containers)
OSの有無
ハイパーバイザー型:ゲストOSのみ
ホスト型:ホストOSとゲストOS両方
コンテナ型:ホストOSのみ
コメント