どうも、エンジニアのハマベです。
仮想化の概念の理解って難しいな、と思ったので、まとめてみることにしました。
仮想化とは?
イメージとしては、大きなサーバー(PC本体)の中に小さな仮想のサーバーをつくり、そのなかで作業できるようにする。といった感じ。
- メリット
- 本物のサーバー同様に扱えるし、テストに必要な環境などを自由に作成できる
- 1台のPCに複数の環境を作ることが出来る
まとめると、一つのハードウェアに必要な環境を集約できる、ということがメリットになる。環境ごとにハードウェアを用意すると、リソースをめいいっぱい使い切るのは難しいし運用も煩雑になってしまう。そこを解消できるのが、仮想化技術だ。
参考サイト:
https://pfs.nifcloud.com/navi/beginner/virtualization.htm
仮想化3種類
ホストOS型
ホストOS(PC本体)の中に仮想化ソフトウェアをインストールし、その中にゲストOS(仮想PC)を作成する方式。
他2種に比べ、簡単に任意のOSで作成できるので、個人的な開発には向いている。
-
メリット
- 仮想化ソフトウェアが比較的扱いやすい
- ホストOSで実行中のアプリと並行して利用できる
-
デメリット
- 他2種とくらべて動作が遅め
- ホストOSに負荷がかかると、動作が重くなってしまう
- 主なソフトウェア
- VirtualBox (Windows/Mac)
- WorkstationPlayer (Windows)
参考:
https://qiita.com/Pentas/items/5f558deeddcfef814b3e
ハイパーバイザー型
ホストOS型と違い、仮想化ソフトウェアを挟まず、直接ゲストOSをインストールする方式。
windows(10以降)の場合、「Hyper-V」というドライバが標準で入っており、使いやすい。本番環境(複数人での開発)向き。
-
メリット
- ホスト型に比べ、ハードウェアを直接制御するため、速度が速い
-
デメリット
- 専用のドライバが必要で、ホスト型より少し難易度が高い
- 主なソフトウェア
- Hyper-V
- vSphereHypervisor
- KVM
参考:
https://thinkit.co.jp/story/2012/10/17/3722
コンテナ型
他2種と異なり、ゲストOSをホストOS上にインストールしない。
「コンテナ」と呼ばれる仮想空間を作り、その中にアプリを構築する。コンテナはホストOSを使用して動作しているため、ゲストOSは必要ない。
-
メリット
-
起動が速く、処理が軽量で済む
-
比較的簡単に、環境をコピーできる
-
コンテナの環境を合わせれば、どのサーバーでも確実にアプリが動作する
-
デメリット
-
カーネル(OSの中核)を共有するため、個別に変更できない
-
コンテナ環境のベースとなるOSと異なるのシステムは動かせない
-
学習コストが比較的高め(新しい技術なので、情報がすくなめ)
- 主なソフトウェア
- Docker (正確にはオープンソース型プラットフォーム)
- Kubernetes (コンテナを管理するソフト?個別に調べた方がよさそう)
参考:
https://licensecounter.jp/engineer-voice/blog/articles/20191101_post_31.html
いかがだったでしょうか。
多分まだまだツッコミどころは多いと思われますが、ご指摘いただけると、とても嬉しいです。かなり喜びます。
以上、ご覧いただきありがとうございました。