コンテナーと仮想マシンContainers vs. virtual machines

このトピックでは、コンテナーと仮想マシン (VM) の主な類似点と相違点の一部と、それぞれを使用するタイミングについて説明します。This topic discusses some of the key similarities and differences between containers and virtual machines (VMs), and when you might want to use each. コンテナーと VM にはそれぞれ用途があります。実際、多くのデプロイでは、コンテナーをハードウェア上で直接実行するのではなく、VM をホスト オペレーティング システムとして使用します (特にクラウドでコンテナーを実行している場合)。Containers and VMs each have their uses–in fact, many deployments of containers use VMs as the host operating system rather than running directly on the hardware, especially when running containers in the cloud.

コンテナーの概要については、「Windows とコンテナー」を参照してください。For an overview of containers, see Windows and containers.

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

コンテナーは、ホスト オペレーティング システムでアプリケーションを実行するための、分離された軽量のサイロです。A container is an isolated, lightweight silo for running an application on the host operating system. コンテナーは、この図に示すように、ホスト オペレーティング システムのカーネル (オペレーティング システムの埋め込まれた配管のようなものと見なすことができます) の上に構築されます。この図に示すように、コンテナーには、ユーザーモードで実行されるアプリケーションと一部の簡易オペレーティング システム API およびサービスのみが含まれます。Containers build on top of the host operating system's kernel (which can be thought of as the buried plumbing of the operating system), and contain only apps and some lightweight operating system APIs and services that run in user mode, as shown in this diagram.

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

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

コンテナーとは対照的に、VM は、この図に示すように、独自のカーネルを含む完全なオペレーティング システムを実行します。In contrast to containers, VMs run a complete operating system–including its own kernel–as shown in this diagram.

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

コンテナーと仮想マシンContainers vs. virtual machines

次の表は、これらの補完的なテクノロジの類似点と相違点の一部を示しています。The following table shows some of the similarities and differences of these complementary technologies.

特徴Feature 仮想マシンVirtual machine コンテナーContainer
分離:Isolation ホスト オペレーティング システムおよびその他の VM から完全に分離します。Provides complete isolation from the host operating system and other VMs. これは、同じサーバーまたはクラスター上の競合企業からのアプリのホスティングなど、強力なセキュリティ境界が重要な場合に便利です。This is useful when a strong security boundary is critical, such as hosting apps from competing companies on the same server or cluster. 通常、ホストとその他のコンテナーから簡易な分離を行いますが、VM と同じくらい強力なセキュリティ境界としては分離しません。Typically provides lightweight isolation from the host and other containers, but doesn't provide as strong a security boundary as a VM. (簡易 VM 内の各コンテナーを分離するために Hyper-V 分離モード を使用すると、セキュリティを向上させることができます)。(You can increase the security by using Hyper-V isolation mode to isolate each container in a lightweight VM).
オペレーティング システムOperating system カーネルを含む完全なオペレーティング システムを実行します。そのため、より多くのシステムリソース (CPU、メモリ、およびストレージ) を必要とします。Runs a complete operating system including the kernel, thus requiring more system resources (CPU, memory, and storage). オペレーティング システムのユーザーモードの部分を実行し、アプリに必要なサービスだけを含めるように調整できます。これにより、使用するシステム リソースを少なくできます。Runs the user mode portion of an operating system, and can be tailored to contain just the needed services for your app, using fewer system resources.
ゲストの互換性Guest compatibility 仮想マシン内で実行可能な、任意のオペレーティング システムを実行できます。Runs just about any operating system inside the virtual machine ホストと同じオペレーティング システムのバージョンを実行できます。 (Hyper-V 分離を使用すると、軽量 VM 環境で同じ OS の以前のバージョンを実行できます。)Runs on the same operating system version as the host (Hyper-V isolation enables you to run earlier versions of the same OS in a lightweight VM environment)
デプロイDeployment Windows 管理センターまたは Hyper-V マネージャーを使用して、個々の VM を展開します。PowerShell または System Center Virtual Machine Manager を使用して複数の VM をデプロイします。Deploy individual VMs by using Windows Admin Center or Hyper-V Manager; deploy multiple VMs by using PowerShell or System Center Virtual Machine Manager. コマンド ラインから Docker を使用して個々のコンテナーをデプロイします。Azure Kubernetes Service などのオーケストレーターを使用して複数のコンテナーをデプロイします。Deploy individual containers by using Docker via command line; deploy multiple containers by using an orchestrator such as Azure Kubernetes Service.
オペレーティング システムの更新プログラムとアップグレードOperating system updates and upgrades 各 VM にオペレーティング システムの更新プログラムをダウンロードしてインストールします。Download and install operating system updates on each VM. 新しいオペレーティング システムのバージョンをインストールするには、アップグレードを行うか、まったく新しい VM を作成するだけで済みます。Installing a new operating system version requires upgrading or often just creating an entirely new VM. これには、特に VM が多数ある場合に、時間がかかることがあります。This can be time-consuming, especially if you have a lot of VMs... コンテナー内のオペレーティング システム ファイルの更新またはアップグレードは同じことです。Updating or upgrading the operating system files within a container is the same:
  1. コンテナー イメージのビルド ファイル (Dockerfile と呼ばれます) を編集して、最新バージョンの Windows ベース イメージを参照します。Edit your container image's build file (known as a Dockerfile) to point to the latest version of the Windows base image.
  2. この新しいベース イメージを使用して、コンテナー イメージを再ビルドします。Rebuild your container image with this new base image.
  3. コンテナー レジストリにお使いの コンテナー レジストリをプッシュします。Push the container image to your container registry.
  4. オーケストレーターを使用して再デプロイします。Redeploy using an orchestrator.
    このオーケストレーターは、大規模にこの作業を行うための強力な自動化機能を提供します。The orchestrator provides powerful automation for doing this at scale. 詳しくは、 チュートリアル:Azure Kubernetes Service でのアプリケーションの更新を参照してください。For details, see Tutorial: Update an application in Azure Kubernetes Service.
永続的ストレージPersistent storage 単一の VM に対してローカルストレージ用の仮想ハードディスク (VHD) を使用するか、複数のサーバーによって共有される記憶域の SMB ファイル共有を使用するUse a virtual hard disk (VHD) for local storage for a single VM, or an SMB file share for storage shared by multiple servers 単一のノードのローカルストレージには Azure ディスクを使用し、複数のノードまたはサーバーで共有するストレージには Azure Files (SMB 共有) を使用します。Use Azure Disks for local storage for a single node, or Azure Files (SMB shares) for storage shared by multiple nodes or servers.
負荷分散Load balancing 仮想マシンの負荷分散は、実行中の VM をフェールオーバー クラスター内の他のサーバーに移動します。Virtual machine load balancing moves running VMs to other servers in a failover cluster. コンテナー自体は移動しません。代わりに、オーケストレーターはクラスターノード上のコンテナーを自動的に開始または停止して、負荷と可用性の変更を管理できます。Containers themselves don't move; instead an orchestrator can automatically start or stop containers on cluster nodes to manage changes in load and availability.
フォールト トレランスFault tolerance VM は、クラスター内の別のサーバーにフェール オーバーできます。その際、VM のオペレーティング システムは新しいサーバー上で再起動されます。VMs can fail over to another server in a cluster, with the VM's operating system restarting on the new server. クラスター ノードで障害が発生した場合、そのノード上で実行されているすべてのコンテナーは、オーケストレーターによって別のクラスターノード上で迅速に再作成されます。If a cluster node fails, any containers running on it are rapidly recreated by the orchestrator on another cluster node.
ネットワークNetworking 仮想ネットワーク アダプターを使用します。Uses virtual network adapters. 仮想ネットワーク アダプターの分離ビューを使用し、簡易な仮想化を提供します。ホストのファイアウォールがコンテナーと共有されるため、使用するリソースは少なくなります。Uses an isolated view of a virtual network adapter, providing a little less virtualization–the host's firewall is shared with containers–while using less resources. 詳細については、Windows コンテナーのネットワークを参照してください。For more, see Windows container networking.