💡

仮想化技術についてまとめてみた

2024/10/25に公開

仮想マシンとコンテナの違い

簡単に違いを説明

仮想マシン
ハイパバイザーによる仮想化で稼働する仮想環境

コンテナ
ホストのカーネルを共有し、隔離された独自の区画を持つ仮想化技術

仮想マシン

仮想化のための専用ソフトウェア(ハイパーバイザー)上で仮想的なハードウェア(仮想マシン)を起動し、ゲストOS(仮想マシンにインストールしたOS)を動作させる方式
ハードウェアをエミュレート(模倣)することで独立した仮想環境の提供

特徴
ハイパバイザーがサポートしているOSであれば、ホストOSとことなるゲストOSを使用できる
完全なOSを含むためリソースの消費が大きく、起動や初期設定に手間がかかる

ベアメタル型とホスト型

ベアメタル型
ハードウエア上でハイパバイザーを直接起動し、その上で仮想マシンとゲストOSを起動する。
ホストOSを介さないため、ホスト型に比べてパフォーマンスが良い。
仮想化ソフトウェアには、Xen、MicrosoftのHyper-V、VMwareのvSphere Hypervisorなどがある。

ホスト型
ホストOS上にアプリケーションの一つとしてハイパバイザーをインストールし、その上で仮想マシンとゲストOSを動作させる。
既に利用しているコンピュータ上に手軽に仮想環境を構築できるが、ホストOSを介すためオーバーヘッドが大きくなる。
ホスト型の仮想化ソフトウェアには、Oracle VM VirtualBox、VMware Workstation、Parallels Desktopなどがある。
あくまでも、ハイパバイザーはアプリの一つ!!!!

Linuxでの仮想化

KVM(Kernel-based Virtual Machine)は、Linuxに標準搭載されている仮想化ソリューションです。仮想化の種類としてはパイパバイザー型
KVMを使用するためには仮想化支援機能を搭載したCPUが必要です。仮想化支援機能とは仮想化ソフトウェアが行う処理の一部をCPUが分担することで処理を高速化する機能で、Intel VT(Intel Virtualization Technology)やAMD-V(AMD Virtualization)という名称で実装

コンテナ

ホストOSのリソースを隔離して、「コンテナ」という仮想環境をつくる。
ホストOSのカーネルを共有することで、仮想マシンやゲストOSを起動せずにアプリの実行環境構築

特徴
ホストOSと異なるOSを使うことができない。
ホストOSのプロセスの一つ
軽量で起動が速い
ポータビリティがある
CgroupsというLinuxカーネルの機能でコンテナごとのユーザ管理やリソース制御を行う
コンテナのrootユーザーはホスト上でもroot権限を持つことになるためセキュリティ上望ましくない
Linuxのユーザー名前空間機能を使うことでコンテナ内のrootユーザーをホスト上の一般ユーザとして扱うことができる。
コンテナイメージは、アプリケーションやその依存関係、設定などを一体化したパッケージ化されたデータであり再利用可能
セキュリティの強度は、ホストOSに依存しているため下がる

ちなみに、、、
仮想化マシンの中でコンテナをつくることもできるので、その点ではハードウェアと異なるOSも対応可能ってことになるね

Docker

LXC(Linuc Containers)をベースに開発されたオープンソースのコンテナ型仮想化ソフトウェア
OS、ライブラリ、アプリケーションをテンプレート化したDockerイメージを用いることで、ホスト環境に依存せずコンテナを起動・作成できる。
Dockerhubというサイトから公式や他の開発者が作成したものをダウンロードできる。

Discussion