仮想化の概要
- 1台の物理マシン上に複数の仮想的なマシンを稼働させる技術
-
仮想化のメリット
- リソースを効率的に利用でき、コスト削減につながる
- サーバーの情報をファイルとして管理できる
- ハードウェアへの依存を無くすことができる
仮想化の種類
- 主に以下の3種類が上げられるが、さらにその中でも仮想マシンを立ち上げるホスト型・ハイパーバイザ型と、コンテナを立ち上げるコンテナ型の2種類に分類できる
-
コンテナとは
- アプリケーションの起動に必要なアプリケーション本体・必要なライブラリ・設定ファイルなどをひとまとめにしたもの
- 仮想マシンを立ち上げる場合とは異なり、ゲストOSを必要としない
ホスト型
-
ホストOS上に仮想化ソフトウェアをインストールし、そのソフトウェア上で仮想マシンを稼動させる
- 代表的なソフトウェアはVirtualBox、KVM、VMWare Fusion、Parallelsなど
-
ホストOS
- 仮想マシンを構築する際の基盤となるOSのこと
-
ゲストOS
- 仮想マシン環境にインストールして稼働するOSのこと
-
ホスト型のメリット
- ソフトウェアをインストールするだけで手軽に導入できる
-
ホスト型のデメリット
- ホストOSの動作にリソースを喰われるため、仮想マシンの動作速度が遅い
- ホストOSを動作させるための物理リソース(メモリなど)が必要である
ハイパーバイザ型
-
物理サーバー上に仮想化ソフトウェアを直接インストールし、そのソフトウェア上で仮想マシンを稼動させる
- 代表的なソフトウェアはXen、VMWare ESXi、Hyper-V など
-
ハイパーバイザー型のメリット
-
動作速度がホスト型よりも早い
- ホストOSのオーバーヘッドが無い
-
動作速度がホスト型よりも早い
-
ハイパーバイザー型のデメリット
-
導入に手間がかかる
- 専用の物理サーバーで稼働させることが多い
-
導入に手間がかかる
コンテナ型
-
Linuxカーネルの機能を利用し、プロセスごとに利用するファイルシステムやネットワークを独立させたり、利用するリソース(CPUやメモリなど)を制限したりする
- 代表的なソフトウェアはDocker、LXC、OpenVZなど
- Windowsにも一応似た機能はある
-
コンテナ型のメリット
-
動作速度がハイパーバイザー型よりも早い
- 仮想HWやゲストOSのオーバーヘッドが無い
- 起動や停止も高速
-
リソースをより効率的に利用できる
- ゲストOS稼働のためのリソースが不要
-
動作速度がハイパーバイザー型よりも早い
-
コンテナ型のデメリット
-
カーネルが異なるOSの起動ができない
- Linux上でWindowsコンテナを動作させることができない
- 逆も然りでWindows上で直接Linuxコンテナも動作させることができない
- ディストリビューションは異なっていてもOK
-
セキュリティリスク
- カーネルをホストOSと共有するため、ホスト型・ハイパーバイザー型と比べてホストからの独立度合いが低い
- Docker やコンテナランタイムに脆弱性があると他のコンテナやホストOSに被害が及ぶケースもある
-
カーネルが異なるOSの起動ができない
⚠️
カーネルとは
カーネルは、オペレーティングシステム(OS)の中心部分で、アプリケーションソフトウェアとハードウェアによるデータ処理の間を仲介する役割を果たします。システムリソースを管理し、ハードウェアとソフトウェアの間のインターフェースとして機能します。
ローカル開発環境
-
簡単かつ高速に開発環境が構築できる
-
Dockerなら
docker compose up
で即時に環境を整えられる
-
Dockerなら
-
コンテナ内に依存関係を含めることができる
- ミドルウェアやライブラリのバージョンの差異で動かない、なんてこともなくなる
-
構築手順がコード化される
- DockerならDockerFileを見れば構築手順が分かる
- さらにDockerFileを配布すれば、他の人も同じ環境をすぐに立ち上げられる
- gitで変更履歴を管理できる
本番環境
-
リリースサイクルを高速化できる
-
簡単に環境を作ったり壊したりできるのでCI/CDと相性がよい
- コードのビルド、テスト、デプロイを自動で行うこと
-
簡単に環境を作ったり壊したりできるのでCI/CDと相性がよい