仮想環境についてまとめてみる

# 仮想化の種類と特徴
## 概要
- 仮想化の種類には大きく**ホストOS型**と**ハイパーバイザ型**と**コンテナ型**の3つある
- 概念図として以下サイトにとてもわかりやすくまとめられている

> ![仮想化の種類.jpg](https://qiita-image-store.s3.amazonaws.com/0/122979/e057c773-7400-9cd4-4719-50fed5ecec9b.jpeg)
> 参照元：https://thinkit.co.jp/story/2014/12/02/5456

### ホスト型
- ホストOS上に仮想化ソフトを動かす
- 仮想化環境上でOSを動かす
- 仮想OS上でアプリケーションを動かす

### ハイパーバイザ型
- マシン全体を仮想環境とする
- 仮想環境上でOSを動かす
- 仮想OS上でアプリケーションを動かす

### コンテナ型
- ホストOS上でコンテナを動かす
- ホストOSと仮想OSでカーネルを共有している
- 基本的にLinuxでのサポート
    - 他のOSでも要件次第で利用可能
    - 詳細は以下にて記載

### ※カーネルの補足説明
- カーネルとはOSの基本機能の役割を担うソフトウエア
- カーネルだけではOSを利用するのが困難なため別途ソフトウェアと組み合わせて利用するのが一般的
- カーネルとソフトウェアを組み合わせたものをディストリビューションという
- 一般的に言われているCentOSやUbuntuは、Linuxカーネル＋ソフトウェアのディストリビューションのことを指す

## 特徴
仮想化の特徴を以下のようにまとめた。
判断理由は後述する。

| 特徴 | **ホストOS型** | **ハイパーバイザ型** | **コンテナ型** | 
|:---------:|:---------:|:---------:|:---------:|
| 既存マシン利用 | 〇 | × | 〇 |
| オーバーヘッド | × | △ | 〇 |
| OSインストール負荷 | × | × | 〇 |
| Linux | 〇 | 〇 | 〇 |
| Windows・Mac | 〇 | 〇 | △ | 
参考：https://thinkit.co.jp/story/2014/12/02/5456

#### 既存マシン
- ハイパーバイザ型は、新規マシンに対してのみ適用可能

#### オーバーヘッド
- コンテナ型はホストのカーネルを利用するためオーバーヘッドは小さい
- ハイパーバイザ型はアクセス経路が限られているためホスト型と比べるとオーバーヘッドは小さい

#### OSインストール負荷
- コンテナ型以外はインストールする必要があるため負荷が高い

#### Linux・Windows・Mac
- 前述もしているが、コンテナ型は基本的にLinuxだが、Windows・Macにも要件次第で対応可能
- 詳細は下記にて記載

# 仮想化ソフトウェア

## ホストOS型
- 仮想化ソフトウェアの有名なものには、**VMware Player**、**Oracle VirtualBox**、**Virtual PC**などがある
- 特徴が以下サイトにとてもわかりやすくまとめられているものの一部抜粋させていただきました

| 特徴 | **VMware Player** | **Oracle VirtualBox** | **Virtual PC** |
|:---------:|:---------:|:---------:|:---------:|
| Windows | 〇 | 〇 | 〇 |
| Mac | × | 〇 | × |
| Linux | 〇 | 〇 | × |
| クローン | × | 〇 | × |
| スナップショット | × | 〇 | × |
参考：http://changineer.info/server/virtualization/virtualization_diff.html

- また仮想環境を設定するのに、自動的に設定を行ってくれる「vagrant」というツールがある
- 「box」という仮想環境のベースとなるイメージファイルを用いて自動で環境を構築してくれる
- 環境構築するには「Vagrantfile」という設定ファイルに「box」を指定して設定ファイル階層で実行をする

## コンテナ型
- コンテナ型のソフトウェアに「Docker」がある
- サポートは基本的LinuxOSだったが、2016年12月時点では要件次第で対応している
- [要件を公式より下記引用](https://docs.docker.com/)

> - Mac
> Docker for Mac requires OS X El Capitan 10.11 or newer macOS release running on a 2010 or newer Mac, with Intel’s hardware support for MMU virtualization. The app will run on 10.10.3 Yosemite, but with limited support. Please see What to know before you install for a full explanation and list of prerequisites.

> - Windows
> Docker for Windows requires 64bit Windows 10 Pro, Enterprise and Education (1511 November update, Build 10586 or later) and Microsoft Hyper-V. Please see What to know before you install for a full list of prerequisites. 

- しかし上記バージョンより前は対象外となっておりその場合「Docker Toolbox」を使うと便利
    - 対象バージョン（2016年12月時点）
        - Mac：OS X Mountain Lion 10.8 以降
        - Windows：Windows 7.1、Windows 8 / 8.1、Windows 10
- 「Docker Toolbox」はDocker環境を簡単に構築するためのインストーラーで、内部ではVirtualBoxでLinuxの仮想環境を構築しその上でDockerを動作させている

## ハイパーバイザ型
- 有名なソフトウェアとして、VMware ESXi、Hyper-V Serverなどがある。


# 参考
- http://docker.yuichi.com/about/strength/index.html
- https://thinkit.co.jp/story/2014/12/02/5456
- http://changineer.info/server/virtualization/virtualization_diff.html
- http://qiita.com/hidekuro/items/fc12344d36d996198e96
- https://docs.docker.com/
- http://devcenter.magellanic-clouds.com/learning/docker-toolbox.html