Virtualization

コスト削減などを目的として近年「仮想マシン」が注目を集め、”仮想化” “仮想マシン”という言葉を見聞きする機会が増えました。

ハードウェアに搭載されているプロセッサやメモリの使用時間を細かく分割し、それぞれをひとまとめにして複数の個別独立したサーバのように機能させるのが「サーバ仮想化」です。こうして作られた見掛け上のサーバを「仮想サーバ」または「仮想マシン」といいます。この仮想マシンを実現するソフトウェアはハイパーバイザーで、VMwareのESXi、LinuxのKVM、MicrosoftのHyper-Vなどがあります。仮想マシンでは、それぞれにOSを動かさなくてはなりません。そのため、仮想マシンごとにプロセッサやメモリを消費し、ストレージも必要です。

一方、1つのOSに「コンテナ」と呼ばれる「他のユーザーから隔離されたアプリケーション実行環境」を作り、あたかも個別独立したサーバのように使おうというのが「コンテナ仮想化」です。これを実現するソフトウェアはコンテナ管理ソフトウェアで、Dockerと呼ばれるオープンソースのソフトウェアが圧倒的なシェアを占めています。コンテナでは、1つのOSで稼働しますので、プロセッサやメモリの消費は少なく、ストレージの使用もわずかです。そのため、仮想マシンに比べて起動時間が短く、同じ性能のハードウェアであれば、より多くのコンテナを同時に動かすことができます。

ホスト型

ホスト型とは、OSに仮想化ソフトウェアをインストールし、その上で仮想マシンを動かす方式のことです。

既存のサーバーを使うことができるため、手軽に利用できるというメリットがあります。ホスト型に含まれる代表的なソフトウェア製品には、 VMware Player・VMware Fusion・Microsoft Virtual PC、Oracle VirtualBoxがあります。デメリットは、ハードウェアにアクセスする際OSを経由しなければいけないという点です 。

ハイパーバイザー型

ハイパーバイザー型は、ホストOSを使わず直接サーバにインストールし仮想マシン環境を作り出す方式のことです。

ハードウェアのリソースを直接管理できるというメリットがあります。 ハイパーバイザー型に含まれる代表的なソフトウェア製品には、VMware ESX・Hyper-V・Citrix XenServerがあります。

コンテナ型

Dockerとは軽量な仮想化環境を実現するためのツールです。
Dockerを利用すればOSの内部に独立したアプリケーションの実行環境を構築することができます。この構築環境をコンテナと呼びます。

コンテナ内のファイルシステムやリソースはベースOSと分離されており、コンテナ内は実行環境として独立しています。
コンテナを利用することで、1つのOS内に複数の実行環境を構築できます。

すべてのコンテナで同一のOS(カーネル)を利用する。

Docker for Mac

MacOSはLinuxじゃないのでDockerは起動出来ません。
なのでDocker for Macというアプリケーションをインストールした時に、準仮想化技術を使ってシンプル高速なLinuxを裏で仮想マシンとして動かして、その仮想マシン内でDockerを利用しています。

実際に、Docker for Macでは、インストール時にAlpine LinuxベースのHyperkit VMがインストールされ、起動時に /var/run/docker.sock が生成されます。
このVMはDocker for Mac上で自動的に管理され、Mac上で dockerdocker-compose コマンドを実行する際に特に設定をしていない限り docker.sock を経由して透過的にVM内でDockerコマンドが実行されるようになっています。

Docker for Windows

Windows 8以降のWindows OSでは、標準的な仮想化環境としてHyper-Vが用意され、Hyper-Vを使うように新しく作り直されたのはDocker for Windowsである。

DockerはLinuxのネームスペースというカーネルの機能を使っているためLinuxが必要です。そのため、Windows上で動かすにはHyper-V上に軽量Linux仮想マシンを作ってその上でDockerが動くようにしています。

Windows標準のHyper-Vを使うため、操作や管理が簡単になるし、Hyper-Vを使う他の開発ツール(Visual Studioなど)とも親和性が高い。開発やテスト環境ではこれはありがたいだろう。

Docker for Windowsを利用するための要件は以下の通りだ。

  • 64bit版のWindows 10(バージョン1511、ビルド10586以降)、ProもしくはEnterprise/Educationエディション
  • Hyper-Vが利用できること
  • コンテナ実行用の仮想マシンには、メモリ2GB、ディスク60GB(容量可変タイプの仮想ディスクで、初期サイズは4GB程度)のリソースが必要

参考: