Контейнеры и виртуальные машины
Область применения: 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. |
Обновления и исправления для операционной системы | Загрузка и установка обновлений операционной системы на каждой виртуальной машине. Для установки новой версии операционной системы требуется обновить, а зачастую и создать полностью новую виртуальную машину. Это может занять много времени, особенно если у вас много виртуальных машин... | Обновление или исправление файлов операционной системы в контейнере выполняется точно так же:
|
Постоянное хранилище | Использует виртуальный жесткий диск (VHD) для локального хранилища для одной виртуальной машины или общий файловый ресурс SMB для совместно используемого несколькими серверами хранилища | Использует диски Azure для локального хранилища для одного узла или службы файлов Azure (общие ресурсы SMB) для совместно используемого несколькими узлами или серверами хранилища. |
Балансировка нагрузки | Балансировка нагрузки виртуальной машины перемещает выполняющиеся виртуальные машины на другие серверы в отказоустойчивом кластере. | Сами контейнеры не перемещаются. Вместо этого Orchestrator может автоматически запускать или прекращать работу контейнеров на узлах кластера для управления изменениями нагрузки и доступности. |
Отказоустойчивость | Виртуальные машины могут выполнить отработку отказа на другой сервер в кластере с перезапуском операционной системы виртуальной машины на новом сервере. | В случае сбоя узла кластера все контейнеры, работающие на нем, быстро пересоздаются Orchestrator на другом узле кластера. |
Сеть | Использует виртуальные сетевые адаптеры. | Использует изолированное представление виртуального сетевого адаптера, предоставляя меньшую виртуализацию: брандмауэр узла используется контейнерами совместно — при этом используется меньше ресурсов. Дополнительные сведения см. в разделе Сетевые подключения контейнеров Windows. |