仮想化とは

ソフトウェアで、実在しているように見える状態を再現することです。

なぜ仮想化するのか

昔は物理的にPCを用意し、1台単位でサーバにしていました。
しかし、現在ではインターネットの利用者拡大によって、想像できないほどのスピードでWebの状況が変化しています。
そのスピードに付いていくために、物理的に作業していては、間に合いません。
そこで、簡単にサーバを増やしたり、減らしたりできる、仮想化というアイデアが取り入れられました。
仮想化された環境では、プログラムによって自動化できるのも、大きなメリットになります。

また、PCの性能が上がったこともあり、余剰のリソースを有効活用できるようになりました。

仮想化のタイプ

仮想化にはいくつかタイプがあるようです。

ホスト型

仮想化ソフトウェアをインストールし、その上で仮想マシンを稼働させます。
入っていたOSを「ホストOS」、仮想マシン上のOSを「ゲストOS」と言います。
手軽に使用できますが、ホストOSの処理にリソースを割かれるため、処理速度があまりでません。

例:VirtualBox、Parallelsなど

ハイパーバイザ型

物理ハードウェア上に「ハイパーバイザ」と呼ばれる仮想化を実現するためのレイヤーを作り、その上で仮想マシンを実行します。
ホストOSを必要としないため物理ハードウェアを直接制御することができ、仮想マシンの速度低下を最小限に抑えることができます。
しかし、ハードウェアを完全にエミュレーションする必要があるので、多くの処理が実行されると動作効率が落ちます。

例:Hyper-V、XenServerなど

コンテナ型

「コンテナ」という仕組みで仮想化しています。
コンテナには、アプリケーションやミドルウェアなどが組み込まれていますが、OSはありません。
そのため、コンテナ型に対応したOSが必要ですが、その代わり、動作が軽快で、性能がほとんど落ちないというメリットがあります。

例:Dockerなど

仮想化にまつわるソフトウェアたち

以下の話題のソフトウェアは、実際にどう関わっているのでしょうか。

Vagrant(ベイグラント)

複数のOS、複数の仮想マシンを、簡単に構築・管理・実行することができます。
VirtualBoxを使用すれば、ホスト型として、ゲストOSをいくつも作成できます。
同じ仮想マシンをそれぞれに用意できるので、「あなたの環境では動くけど、私の環境では動かない」ということが起こりません。

Chef(シェフ)

複数台のサーバを同じ環境にできるソフトウェアです。
直接、仮想化とは関係ありませんが、まっさらな仮想マシンにアプリケーションをインストールするときに便利です。

Docker(ドッカー)

コンテナ型の仮想化ソフトウェアです。
Dockerfileと呼ばれるファイルからコンテナを管理・作成することが可能です。
Googleでは、すべてのサービスが、Dockerのようなコンテナ型仮想化技術の上で、実行されているそうです。

まとめ

サーバーは仮想化の進歩によって、気軽に扱えるようになってきました。
それだけでなく、多くの作業が自動化されるようになり、便利になりました。
(それでも、私にとってはまだまだ難しいです)
次は、実践も交えて、学んでいきたいと思います。

では、そんな感じで、またねー。