コンテナーと VM の違いを一覧表示する
Contoso Windows Server 管理者は、どのようなワークロードやシナリオが VM に適していて、どのようなものがコンテナーにより適しているかを判断する必要があります。 また、VM とコンテナーのワークロードの特性、それらを使用できるシナリオ、およびどのような状況でコンテナーのワークロードを使って効率を上げることができるかを評価します。
コンテナーと VM
VM とコンテナーはいずれも、分離されたポータブル コンピューティング環境をアプリケーションとサービスに提供するための仮想化テクノロジです。
VM は、仮想化されたハードウェア、OS、ユーザー モード、および独自のカーネル モードを含め、コンピューター全体をシミュレートするものです。 VM は非常にアジャイルであり、アプリケーションに多大なサポートを提供します。しかし、VM は大きくなりがちであり、ホスト マシンのリソースが消費されます。
(前述のとおり) コンテナーは、ホスト オペレーティング システムのカーネルをベースに構築され、パッケージ化されたアプリの分離されたユーザー モード プロセスが含まれています。 このため、コンテナーは非常に軽量で、起動も高速です。 VM とは異なり、コンテナーは開発からテスト、運用環境に簡単に移動できます。 しかし、OS はまったく同じではないので、すべてのアプリケーションがコンテナー環境で同じように実行されるわけではありません (またはまったく実行されない)。
類似点と相違点
次の表は、VM とコンテナーの機能の類似点と相違点をまとめたものです。
機能 | VM | コンテナー |
---|---|---|
分離: | ホスト OS と他の VM からの完全な分離を実現します。 | ホストと他のコンテナーからの軽量の分離を実現します。 |
OS | カーネルを含む完全な OS を実行します。 | OS のユーザー モード部分のみを実行します。 |
ゲストの互換性 | サポートされている OS を VM 内で実行できます | Windows コンテナーでは、ホストとコンテナーの OS バージョンが一致している必要があります (詳細と代替手段については、分離モードを参照してください)。 |
デプロイ | Hyper-V マネージャーまたはその他の VM 管理ツールを使用してデプロイされます。 | Docker または別のコンテナー ランタイムを使用してデプロイおよび管理されます。 Kubernetes などのオーケストレーターを使用して、複数のコンテナーをデプロイできます。 |
永続ストレージ | 仮想ハード ディスク ファイルまたはサーバー メッセージ ブロック (SMB) 共有を使用します。 | コンテナーが存在しなくなると、データは保持されません。 Windows Server でコンテナーにデータを保持するには、永続ストレージを使用する必要があります。 |
負荷分散と高可用性 | Windows フェールオーバー クラスターまたは Windows ロード バランサーを使用して、必要に応じて VM を移動し、より高いボリュームをサポートします。 | コンテナー オーケストレーターを使用して、コンテナーを自動的に開始および停止し、自動スケーリングし、追加のトラフィックをサポートします。 |
ネットワーク | 仮想ネットワーク アダプターを使用します。 | シナリオに応じて、異なるネットワーク オプションを使用できます。 既定値は、内部スイッチを使用し、ホストからコンテナーにポートをマップするネットワーク アドレス変換 (NAT) ネットワークです。 |
注意
高度に最適化された VM 内でコンテナーをプロビジョニングし、分離とセキュリティを強化するのが一般的です。
コンテナーの利点
大まかに言えば、コンテナーは次のとおりです。
必要なリソースは比較的少量です。 リソースの消費は VM よりも少量です。
すばやく起動します。 コンテナーの起動時間は、新しいプロセスの開始に必要な時間とほぼ同じです。
サーバー密度を向上させます。 コンテナーは、VM に比べて、使用可能なハードウェアのメモリ、ディスク、および CPU をより効率的に使用できます。 その結果、アイドル状態のサーバーが少なくなり、既存のコンピューティング リソースの使用率が向上します。 これは、コストを削減できるため、クラウド プロバイダーとユーザーにとって特に重要です。
移植性。 コンテナーは、実行されている環境に関係なく同じように動作します。 コンテナーには、動作するアプリケーションに対する依存関係があります。 これにより、コンテナーは、開発、テスト、運用間、およびオンプレミスとクラウドの間で同じように実行できます。
次の図は、PC、VM、コンテナー、プロセスの分離と効率を比較して示したものです。
分離の度合いが最も高いのは PC です。 VM、コンテナー、プロセスの順に分離は低くなります。
効率の度合いが最も高く、結果として密度も高くなるのはプロセスです。 コンテナー、VM、PC の順に効率は低くなります。
ハードウェア、カーネル、システム リソース (ファイル システムなど) は共有されます。
VM の場合、ハードウェアのみが共有されます。
コンテナーの場合、ハードウェアとカーネルが共有されます (カーネルを共有しない Windows Hyper-V コンテナーを除きます)。
プロセスの場合、ハードウェア、カーネル、システム リソースが共有されます。
PC の場合、これらのいずれも共有されません。
ヒント
永続ストレージの場合、"バインド マウント" を使用して、ローカル マシン上に場所をマウントできます。 その場所にあるファイルは、コンテナーを再起動したとき、またはファイルを複数のコンテナーと共有する場合に使用できます。 コンテナーを複数のマシン上で実行し、同じファイルにアクセスできるようにするには、代わりに名前付きボリュームまたは SMB マウントを使用する必要があります。
Kubernetes などのオーケストレーターには、永続ストレージの独自の実装があります。
注意
C:\ などの機密性の高いディレクトリは、信頼されていないコンテナーにバインド マウントしないでください。 これにより、信頼されていないコンテナーから、通常はアクセスできないホスト上のファイルを変更できるようになり、セキュリティ違反が発生する可能性があります。 さらに、別の環境に移動するときにコンテナーが正しく動作することを確認します。 つまり、コンテナーを特定のホスト上の特定のドライブにバインドしないようにします。
VM を選択すべき場合
次の場合は VM を使用してください。
複数のオペレーティング システムを管理する必要がある。
グラフィカル ユーザー インターフェイス (GUI) など、完全な OS のすべてのリソースとサービスを必要とするアプリを実行する必要がある。
変更を保存する、永続的な環境が必要である。 例: データベースがコンテナーで実行するのに適していない。
完全な分離とセキュリティが必要である。
コンテナーを選択すべき場合
次の場合はコンテナーを使用してください。
すぐに起動する軽量のアプリケーション パッケージが必要である。
単一のアプリの複数のインスタンスをデプロイする必要がある。自動スケールや水平スケールが必要である。
オンデマンド ベースで非永続的なアプリまたはプロセスを実行する必要がある。
基となる任意のインフラストラクチャ上で動作するアプリをデプロイする必要がある。