Контейнеры и виртуальные машиныContainers vs. virtual machines

В этом разделе обсуждаются некоторые ключевые сходства и различия между контейнерами и виртуальными машинами (ВМ), а также ситуации, когда может потребоваться каждый из них.This topic discusses some of the key similarities and differences between containers and virtual machines (VMs), and when you might want to use each. Контейнеры и ВМ имеют свои преимущества: на самом деле многие среды контейнеров используют ВМ в качестве операционной системы сервера, а не работают непосредственно на оборудовании, в частности при работе с контейнерами в облаке.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

В отличие от контейнеров, виртуальные машины работают под управлением полноценной операционной системы с собственным ядром, как показано на этой схеме.In contrast to containers, VMs run a complete operating system–including its own kernel–as shown in this diagram.

Схема архитектуры, показывающая, работу полноценной операционной системы в ВМ наряду с операционной системой сервера

Контейнеры и виртуальные машиныContainers vs. virtual machines

В таблице ниже показаны некоторые сходства и различия этих взаимно дополняющих технологий.The following table shows some of the similarities and differences of these complementary technologies.

ФункцияFeature Виртуальная машинаVirtual machine КонтейнерContainer
ИзоляцияIsolation Обеспечивает полную изоляцию от операционной системы узла и других виртуальных машин.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. Обычно предоставляет упрощенную изоляцию от узла и других контейнеров, но не предоставляет настолько надежную границу безопасности, как в случае виртуальных машин.Typically provides lightweight isolation from the host and other containers, but doesn't provide as strong a security boundary as a VM. (Усилить безопасность можно, используя режим изоляции Hyper-V, чтобы изолировать каждый контейнер в небольшой виртуальной машине).(You can increase the security by using Hyper-V isolation mode to isolate each container in a lightweight VM).
Операционная системаOperating system Содержит полноценную операционную систему, включая ядро, поэтому требует больше системных ресурсов (ЦП, памяти и хранилища).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 позволяет запускать более ранние версии одной и той же ОС в среде небольшой виртуальной машины).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; развертывание нескольких виртуальных машин с помощью PowerShell или System Center Virtual Machine Manager.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 с использованием командной строки; развертывание нескольких контейнеров с помощью Orchestrator, например службы Azure Kubernetes.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 Загрузка и установка обновлений операционной системы на каждой виртуальной машине.Download and install operating system updates on each VM. Для установки новой версии операционной системы требуется обновить, а зачастую и создать полностью новую виртуальную машину.Installing a new operating system version requires upgrading or often just creating an entirely new 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. Повторно разверните образ с помощью Orchestrator.Redeploy using an orchestrator.
    Orchestrator предоставляет широкие возможности автоматизации при масштабировании.The orchestrator provides powerful automation for doing this at scale. Дополнительные сведения см. в разделе Tutorial: Update an application in Azure Kubernetes Service (Руководство по обновлению приложений в службе Azure Kubernetes).For details, see Tutorial: Update an application in Azure Kubernetes Service.
Постоянное хранилищеPersistent storage Использует виртуальный жесткий диск (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 (общие ресурсы 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 Балансировка нагрузки виртуальной машины перемещает выполняющиеся виртуальные машины на другие серверы в отказоустойчивом кластере.Virtual machine load balancing moves running VMs to other servers in a failover cluster. Сами контейнеры не перемещаются. Вместо этого Orchestrator может автоматически запускать или прекращать работу контейнеров на узлах кластера для управления изменениями нагрузки и доступности.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 Виртуальные машины могут выполнить отработку отказа на другой сервер в кластере с перезапуском операционной системы виртуальной машины на новом сервере.VMs can fail over to another server in a cluster, with the VM's operating system restarting on the new server. В случае сбоя узла кластера все контейнеры, работающие на нем, быстро пересоздаются Orchestrator на другом узле кластера.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.