← すべての問題
仮想化とコンテナ化の主な違いは何ですか?また、それぞれのテクノロジーは何に使用されますか?
中程度中級DevOps

仮想化とコンテナ化の主な違いは何ですか?また、それぞれのテクノロジーは何に使用されますか?

要点
仮想化は物理ハードウェアを抽象化します。ハイパーバイザーは仮想マシンを実行し、 それぞれに独自の完全なゲスト OS が搭載されています。コンテナ化は OS 層を抽象化します: コンテナ ホスト カーネルを共有し、アプリをプロセスとして分離することで、アプリを軽量かつ高速にします。 ただし、分離は弱くなります。

仮想化 (VM)。 仮想マシンは物理ハードウェアを抽象化したもので、1 つのサーバーを多数のサーバーに変換します。 ハイパーバイザはホストと VM の間に位置し、CPU、メモリ、ストレージをプールします。各 VM には、ゲスト OS の完全なコピー に加えて、アプリケーションとすべてのライブラリが含まれています。ハイパーバイザー (VMM) は分離を強制し、その境界は CPU 仮想化拡張機能 (Intel VT-x / AMD-V) によってハードウェア支援されます。

ハイパーバイザーには 2 つのタイプがあります。

  • タイプ 1 (ベアメタル): はハードウェア上で直接実行されます。クリーンな例としては、VMware ESXi/vSphere、Microsoft Hyper-V、Xen などがあります。 KVM はハイブリッド ケースです。ホストが通常のプロセスを実行しながら、カーネルをタイプ 1 ハイパーバイザーに変える Linux カーネル モジュールです。
  • タイプ 2 (ホスト型): 従来の OS (VirtualBox、VMware Workstation) 上でアプリケーションとして実行されます。個人のマシンに適しています。

コンテナ化。 コンテナはコードとそのすべての依存関係 (ランタイム、ライブラリ、設定) をパッケージ化し、ハードウェアではなく オペレーティング システムを仮想化します。コンテナは ホスト OS カーネルを共有し、ユーザー空間で分離されたプロセスとして実行されます。 Linux では、これは 名前空間 (分離) と cgroups (リソース アカウンティングと制限) を使用し、機能、seccomp、MAC (SELinux/AppArmor)、ユーザー名前空間、ルートレス モード によってさらに強化されます。カーネル共有は OS ファミリの互換性を意味します。Linux コンテナには Linux カーネルが必要であるため、Windows/macOS 上の Docker Desktop は軽量の Linux VM を静かに実行します。 Docker はコンテナを普及させましたが、形式は OCI によって標準化されています。他のランタイム (containerd、CRI-O、Podman) も存在します。

主な違い:

  • サイズ: コンテナ イメージは通常、数 MB から数百 MB です。 VM は GB です (固定された数ではなく、桁数を例示したものです)。
  • 起動: コンテナは秒/ミリ秒で起動します。 VM は完全な OS を起動する必要があります。
  • オーバーヘッド: コンテナーはアプリごとに個別の OS を必要としません。高密度でライセンス コストが低くなります。
  • 分離/セキュリティ: VM は、より強力なハードウェア ベースの分離を提供します。コンテナは、より弱いソフトウェアベースの分離を提供します (コンテナが共有カーネルから逃れるリスク)。中間点は、VM レベルの分離に近づくサンドボックス ランタイム (gVisor、Kata Containers、Firecracker) です。

それぞれの用途:

  • VM: 1 台のサーバー上で異なる OS を実行し、リソースを大量に消費するワークロードまたはモノリシックなワークロード、および強力な分離 (マルチテナンシー、レガシー アプリ)。
  • コンテナ: クラウドネイティブ開発、マイクロサービス、CI/CD、移植性、高速水平スケーリング (Kubernetes によって調整)。

実際には、この 2 つは補完的です。コンテナは多くの場合、アジャイルな配信と強力な分離を組み合わせるために VM 内で実行されます。

Dockerコンテナ仮想化

今すぐダウンロードして、自分の課題で無料で試そう!

Windows版をダウンロード
10 15 クレジット無料 • クレジットカード不要バージョン: 読み込み中…

インストール不要 - ダウンロードして起動。登録不要 - Googleでログイン。