コンテナーと仮想マシン

適用対象: Windows Server 2022、Windows Server 2019、Windows Server 2016

このトピックでは、コンテナーと仮想マシン (VM) の主な類似点と相違点の一部と、それぞれを使用するタイミングについて説明します。 コンテナーと VM にはそれぞれ用途があります。実際、多くのデプロイでは、コンテナーをハードウェア上で直接実行するのではなく、VM をホスト オペレーティング システムとして使用します (特にクラウドでコンテナーを実行している場合)。

コンテナーの概要については、「Windows とコンテナー」を参照してください。

コンテナー アーキテクチャ

コンテナーは、ホスト オペレーティング システムでアプリケーションを実行するための、分離された軽量のサイロです。 コンテナーは、この図に示すように、ホスト オペレーティング システムのカーネル (オペレーティング システムの埋め込まれた配管のようなものと見なすことができます) の上に構築されます。この図に示すように、コンテナーには、ユーザーモードで実行されるアプリケーションと一部の簡易オペレーティング システム API およびサービスのみが含まれます。

コンテナーがカーネルの上でどのように実行されるかを示すアーキテクチャ図

仮想マシンのアーキテクチャ

コンテナーとは対照的に、VM は、この図に示すように、独自のカーネルを含む完全なオペレーティング システムを実行します。

ホスト オペレーティング システムの横で、VM がどのようにオペレーティング システム全体を実行するかを示すアーキテクチャ図

コンテナーと仮想マシン

次の表は、これらの補完的なテクノロジの類似点と相違点の一部を示しています。

特徴 仮想マシン コンテナー
分離: ホスト オペレーティング システムおよびその他の VM から完全に分離します。 これは、同じサーバーまたはクラスター上の競合企業からのアプリのホスティングなど、強力なセキュリティ境界が重要な場合に便利です。 通常、ホストとその他のコンテナーから簡易な分離を行いますが、VM と同じくらい強力なセキュリティ境界としては分離しません。 (簡易 VM 内の各コンテナーを分離するために Hyper-V 分離モード を使用すると、セキュリティを向上させることができます)。
オペレーティング システム カーネルを含む完全なオペレーティング システムを実行します。そのため、より多くのシステムリソース (CPU、メモリ、およびストレージ) を必要とします。 オペレーティング システムのユーザーモードの部分を実行し、アプリに必要なサービスだけを含めるように調整できます。これにより、使用するシステム リソースを少なくできます。
ゲストの互換性 仮想マシン内で実行可能な、任意のオペレーティング システムを実行できます。 ホストと同じオペレーティング システムのバージョンを実行できます。 (Hyper-V 分離を使用すると、軽量 VM 環境で同じ OS の以前のバージョンを実行できます。)
デプロイ Windows 管理センターまたは Hyper-V マネージャーを使用して、個々の VM を展開します。PowerShell または System Center Virtual Machine Manager を使用して複数の VM をデプロイします。 コマンド ラインから Docker を使用して個々のコンテナーをデプロイします。Azure Kubernetes Service などのオーケストレーターを使用して複数のコンテナーをデプロイします。
オペレーティング システムの更新プログラムとアップグレード 各 VM にオペレーティング システムの更新プログラムをダウンロードしてインストールします。 新しいオペレーティング システムのバージョンをインストールするには、アップグレードを行うか、まったく新しい VM を作成するだけで済みます。 これには、特に VM が多数ある場合に、時間がかかることがあります。 コンテナー内のオペレーティング システム ファイルの更新またはアップグレードは同じことです。
  1. コンテナー イメージのビルド ファイル (Dockerfile と呼ばれます) を編集して、最新バージョンの Windows ベース イメージを参照します。
  2. この新しいベース イメージを使用して、コンテナー イメージを再ビルドします。
  3. コンテナー レジストリにお使いの コンテナー レジストリをプッシュします。
  4. オーケストレーターを使用して再デプロイします。
    このオーケストレーターは、大規模にこの作業を行うための強力な自動化機能を提供します。 詳しくは、 チュートリアル:Azure Kubernetes Service でのアプリケーションの更新を参照してください。
永続的ストレージ 単一の VM に対してローカルストレージ用の仮想ハードディスク (VHD) を使用するか、複数のサーバーによって共有される記憶域の SMB ファイル共有を使用する 単一のノードのローカルストレージには Azure ディスクを使用し、複数のノードまたはサーバーで共有するストレージには Azure Files (SMB 共有) を使用します。
負荷分散 仮想マシンの負荷分散は、実行中の VM をフェールオーバー クラスター内の他のサーバーに移動します。 コンテナー自体は移動しません。代わりに、オーケストレーターはクラスターノード上のコンテナーを自動的に開始または停止して、負荷と可用性の変更を管理できます。
フォールト トレランス VM は、クラスター内の別のサーバーにフェール オーバーできます。その際、VM のオペレーティング システムは新しいサーバー上で再起動されます。 クラスター ノードで障害が発生した場合、そのノード上で実行されているすべてのコンテナーは、オーケストレーターによって別のクラスターノード上で迅速に再作成されます。
ネットワーク 仮想ネットワーク アダプターを使用します。 仮想ネットワーク アダプターの分離ビューを使用し、簡易な仮想化を提供します。ホストのファイアウォールがコンテナーと共有されるため、使用するリソースは少なくなります。 詳細については、Windows コンテナーのネットワークを参照してください。