Что такое гипервизор в контексте Docker?

«Что такое гипервизор в контексте Docker?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Вопрос содержит распространенную терминологическую неточность. Docker по своей сути не использует и не требует гипервизора в классическом понимании (как VMware или KVM). Docker — это технология контейнеризации, а не виртуализации.

Ключевое отличие:

  • Виртуализация (с гипервизором): Гипервизор эмулирует виртуальное железо для каждой гостевой ОС. Запускаются полноценные, изолированные операционные системы со своим ядром.
  • Контейнеризация (Docker): Контейнеры разделяют ядро хостовой операционной системы, используя механизмы изоляции пространств имен (namespaces) и групп управления ресурсами (cgroups) ядра Linux. Это делает контейнеры гораздо более легковесными и быстрыми в запуске.

Откуда возникает путаница с «гипервизором»? Термин может появляться в двух контекстах:

  1. Docker Desktop для macOS и Windows: Поскольку macOS и Windows имеют другое ядро (не Linux), для запуска Linux-контейнеров требуется легковесная Linux-виртуальная машина. В Docker Desktop эта VM прозрачна для пользователя, но технически она запускается гипервизором:
    • macOS: Используется гипервизор HyperKit (на основе xhyve).
    • Windows: Используется Hyper-V (включенный в Windows) или WSL 2 (подсистема Windows для Linux, которая также использует виртуализацию).
  2. Запуск Docker на Linux-хосте: На чистом Linux-сервере Docker работает нативно, без какого-либо гипервизора. Контейнеры запускаются непосредственно ядром хоста.

Практический пример — проверка среды:

# На Linux-хосте (нативная работа Docker)
docker run --rm alpine uname -a
# Вывод будет содержать то же ядро, что и у хоста, например: Linux <container_id> 5.15.0-xx-generic ...

# На Windows с Docker Desktop (WSL 2 backend)
docker run --rm alpine uname -a
# Вывод покажет ядро легковесной Linux VM, например: Linux <container_id> 5.10.102.1-microsoft-standard-WSL2 ...

Вывод: Говорить о «гипервизоре Docker» корректно только в контексте Docker Desktop на macOS/Windows. На Linux-серверах, где обычно развертываются production-контейнеры, Docker работает без гипервизора, что является одним из его ключевых преимуществ в плане производительности и эффективности использования ресурсов.