開発にあたり、実行環境を再現するため仮想マシン(仮想機械)を構築することはよくあると思う。
今まで漠然と使っていたが、改めて仮想環境についてまとめてみる。
仮想マシンの種類
まず、仮想マシンと言っても、いくつか種類がある。
ホスト型
- VMware Player
- VMware Fusion
- VirtualBox
など。
ホストとなるOSの上で動作する仮想マシン。
他のアプリケーションと同じように、インストールして実行するだけなので、導入がカンタン。
ただし、ホストOSの上で動作するため、マシンスペックがある程度ないと厳しいかも。
ハイパーバイザ型
- Hyper-V
- vSphere
- Xen
など。
ハードウェア上で動作する。
この型では、各種OSとハードウェアの間で、ハイパーバイザと呼ばれる管理システムが仮想化を実現しているため、ホスト型に比べてハードウェアの負荷が少なくて済む。
コンテナ型
Dockerしか知らない(笑)
コンテナ型は、他の種類と違い、OSを仮想実行するのではなく、OSで使用するアプリケーションを仮想実行している。
メモリを喰うOSが動いていないため、他に比べると処理が軽い。
ただし、それらを実装するためにホストOSのカーネルを共有しているため、ホストOSや仮想化できるコンテナに制限がある。
仮想環境の構築を便利にするツール
Vagrant
ホスト型仮想マシンのVirtualBoxやVMwareなどで使うことができる、Vagrant(ベイグラント)というツールがある。
これは仮想マシン構築用の補助ツールで、Vagrantfileというファイルに環境情報を記述しておき、読み込むことで、仮想環境の構成を自動で再現することが出来る。
Vagrantを導入することで、構築手順書を指差し確認しながら新環境を構築する必要がなくなり、開発初期のコストを大幅に下げることが出来る。
Kubernetes
Dockerの実行環境をクラスタ化するシステム。クーベルネイテス。
スケールアウトしたい場合に、コンテナの実行環境が別々のマシンだと連携させるのが大変だが、Kubernetesを利用することで、一つの実行環境のように扱うことが出来る。
とりあえず聞きかじったことだけ並べてみた。
後は開発で実際に使いながら、詳細をまとめていこうと思う。