Контейнеры и виртуальные машины

Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016

В этом разделе обсуждаются некоторые ключевые сходства и различия между контейнерами и виртуальными машинами (ВМ), а также ситуации, когда может потребоваться каждый из них. Контейнеры и ВМ имеют свои преимущества: на самом деле многие среды контейнеров используют ВМ в качестве операционной системы сервера, а не работают непосредственно на оборудовании, в частности при работе с контейнерами в облаке.

Общие сведения о контейнерах см. в разделе Windows и контейнеры.

Архитектура контейнера

Контейнер — это изолированный, нетребовательный к ресурсам приемник команд, предназначенный для запуска приложения в операционной системе сервера. Контейнеры реализуются поверх ядра операционной системы узла (которое можно считать своеобразным фундаментом операционной системы) и содержат только приложения и некоторые API-интерфейсы и службы операционной системы, работающие в пользовательском режиме, как показано на этой схеме.

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

Архитектура виртуальной машины

В отличие от контейнеров, виртуальные машины работают под управлением полноценной операционной системы с собственным ядром, как показано на этой схеме.

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

Контейнеры и виртуальные машины

В таблице ниже показаны некоторые сходства и различия этих взаимно дополняющих технологий.

Функция Виртуальная машина Контейнер
Изоляция Обеспечивает полную изоляцию от операционной системы узла и других виртуальных машин. Это полезно, когда важна строгая граница безопасности, например для разделения приложений от конкурирующих компаний на одном сервере или в кластере. Обычно предоставляет упрощенную изоляцию от узла и других контейнеров, но не предоставляет настолько надежную границу безопасности, как в случае виртуальных машин. (Усилить безопасность можно, используя режим изоляции Hyper-V, чтобы изолировать каждый контейнер в небольшой виртуальной машине).
Операционная система Содержит полноценную операционную систему, включая ядро, поэтому требует больше системных ресурсов (ЦП, памяти и хранилища). Запускает часть операционной системы в пользовательском режиме и ее можно адаптировать, чтобы она содержала только необходимые службы для приложения, что позволит использовать меньше системных ресурсов.
Совместимость с гостевой системой Работает практически с любой операционной системой в виртуальной машине Работает на той же версии операционной системы, что и узел (изоляция Hyper-V позволяет запускать более ранние версии одной и той же ОС в среде небольшой виртуальной машины).
Развертывание Развертывание отдельных виртуальных машин с помощью центра администрирования Windows или диспетчера Hyper-V; развертывание нескольких виртуальных машин с помощью PowerShell или System Center Virtual Machine Manager. Развертывание отдельных контейнеров с помощью Docker с использованием командной строки; развертывание нескольких контейнеров с помощью Orchestrator, например службы Azure Kubernetes.
Обновления и исправления для операционной системы Загрузка и установка обновлений операционной системы на каждой виртуальной машине. Для установки новой версии операционной системы требуется обновить, а зачастую и создать полностью новую виртуальную машину. Это может занять много времени, особенно если у вас много виртуальных машин... Обновление или исправление файлов операционной системы в контейнере выполняется точно так же:
  1. Измените файл сборки образа контейнера (известный как Dockerfile), чтобы он указывал на последнюю версию базового образа Windows.
  2. Пересоберите образ контейнера с новым базовым образом.
  3. Отправьте образ контейнера в реестр контейнеров.
  4. Повторно разверните образ с помощью Orchestrator.
    Orchestrator предоставляет широкие возможности автоматизации при масштабировании. Дополнительные сведения см. в разделе Tutorial: Update an application in Azure Kubernetes Service (Руководство по обновлению приложений в службе Azure Kubernetes).
Постоянное хранилище Использует виртуальный жесткий диск (VHD) для локального хранилища для одной виртуальной машины или общий файловый ресурс SMB для совместно используемого несколькими серверами хранилища Использует диски Azure для локального хранилища для одного узла или службы файлов Azure (общие ресурсы SMB) для совместно используемого несколькими узлами или серверами хранилища.
Балансировка нагрузки Балансировка нагрузки виртуальной машины перемещает выполняющиеся виртуальные машины на другие серверы в отказоустойчивом кластере. Сами контейнеры не перемещаются. Вместо этого Orchestrator может автоматически запускать или прекращать работу контейнеров на узлах кластера для управления изменениями нагрузки и доступности.
Отказоустойчивость Виртуальные машины могут выполнить отработку отказа на другой сервер в кластере с перезапуском операционной системы виртуальной машины на новом сервере. В случае сбоя узла кластера все контейнеры, работающие на нем, быстро пересоздаются Orchestrator на другом узле кластера.
Сеть Использует виртуальные сетевые адаптеры. Использует изолированное представление виртуального сетевого адаптера, предоставляя меньшую виртуализацию: брандмауэр узла используется контейнерами совместно — при этом используется меньше ресурсов. Дополнительные сведения см. в разделе Сетевые подключения контейнеров Windows.