← Назад к вопросам

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

2.2 Middle🔥 201 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Гипервизор в контексте Docker

Гипервизор — это программное обеспечение, которое управляет виртуальными машинами (VM) и создаёт изолированные вычислительные среды. Docker НЕ использует гипервизор в прямом смысле, но важно понимать различие между контейнеризацией и виртуализацией.

Что такое гипервизор

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

Физический сервер
       ↓
  Гипервизор (KVM, VirtualBox, Hyper-V, ESXi)
       ↓
   ┌─────┬─────┬─────┐
   ↓     ↓     ↓
  ОС1   ОС2   ОС3
  VM1   VM2   VM3

Каждая виртуальная машина имеет свою полную операционную систему, что требует много ресурсов.

Два типа гипервизоров

Type 1: Native/Bare-metal гипервизор

Использует оборудование напрямую, без ОС хоста:

Оборудование
    ↓
  ESXi (Hypervisor)
    ↓
 ┌─────┬─────┐
 ↓     ↓
ВМ    ВМ
Linux Windows

Примеры: VMware ESXi, Hyper-V, KVM (в режиме хоста)

Type 2: Hosted гипервизор

Запускается как приложение поверх ОС хоста:

Оборудование
    ↓
  Linux/Windows/macOS (ОС хоста)
    ↓
  VirtualBox/VMware Player (Hypervisor)
    ↓
 ┌─────┬─────┐
 ↓     ↓
ВМ    ВМ
Ubuntu CentOS

Примеры: VirtualBox, VMware Workstation, Parallels Desktop

Как Docker связан с гипервизором

Docker не использует гипервизор в классическом смысле. Вместо этого Docker использует контейнеризацию — технологию ОС уровня.

╔════════════════════════════════════════════════════════╗
║              VirtualBox (гипервизор)                   ║
╠════════════════════════════════════════════════════════╣
║  Linux VM (полная ОС с ядром)                          ║
║  ├─ Kernel (Linux)                                     ║
║  └─ cgroups + namespaces                               ║
║     ├─ Container 1 (Java приложение)                  ║
║     ├─ Container 2 (Nginx)                             ║
║     └─ Container 3 (PostgreSQL)                        ║
╚════════════════════════════════════════════════════════╝

Оперирующая система хоста (Windows, macOS)

Различие: ВМ vs Контейнеры

╔════════════════════╦════════════════════╗
║    Гипервизор      ║     Docker         ║
║   (Virtual Machine)║   (Containers)     ║
╠════════════════════╬════════════════════╣
║ Полная ОС для     ║ Разделяют хост ОС ║
║ каждой ВМ         ║                    ║
║                   ║                    ║
║ Память: 2-4 GB   ║ Память: 50-500 MB ║
║ Вес: 1-3 GB       ║ Вес: 10-100 MB     ║
║                   ║                    ║
║ Запуск: 30-60 сек ║ Запуск: 1-2 сек    ║
║ Overhead: много   ║ Overhead: мало     ║
║                   ║                    ║
║ Разделение: kernel║ Разделение: процес║
║ + все ОС слои     ║ + filesystem       ║
║                   ║                    ║
║ Надёжность: выше  ║ Плотность: выше    ║
╚════════════════════╩════════════════════╝

Как Docker работает на разных ОС

На Linux: Прямое использование ядра

Оборудование
  ↓
 Linux Kernel
  ↓
 Docker (использует cgroups + namespaces)
  ↓
┌──────────┬──────────┬──────────┐
│Container │Container │Container │
│  (Java)  │ (Node)   │ (Python) │
└──────────┴──────────┴──────────┘

Особенность: контейнеры делят ядро Linux.

На Windows/macOS: Нужна виртуализация

Оборудование
  ↓
Windows/macOS (Host OS)
  ↓
Hyper-V / VirtualBox (Hypervisor) ← Здесь гипервизор!
  ↓
Linux VM (лёгкая виртуальная машина)
  ↓
Linux Kernel
  ↓
Docker Engine
  ↓
┌──────────┬──────────┐
│Container │Container │
└──────────┴──────────┘

Важно: на Windows и macOS Docker Desktop использует гипервизор (Hyper-V на Windows, VirtualBox/Hyperkit на macOS) для запуска лёгкой Linux VM!

Практический пример

Запуск контейнера

# На Linux — прямой запуск
docker run -d --name web -p 8080:80 nginx

# Docker использует:
# - cgroups для ограничения CPU/Memory
# - namespaces для изоляции процессов
# - Union FileSystem для образов
# Гипервизор НЕ используется!

# На Windows/macOS — используется гипервизор
# 1. Docker Desktop запускает скрытую Linux VM через гипервизор
# 2. Контейнер запускается внутри этой VM
# 3. Гипервизор обеспечивает изоляцию VM от хоста

Проверка на Linux

# На Linux — видны cgroups
cat /proc/cgroups

# На Linux — видны namespaces
ls -la /proc/self/ns/
# cgroup cpu ipc mnt net pid uts

# Запущенные контейнеры — это просто процессы ядра!
ps aux | grep docker

Docker Architecture с гипервизором (Windows/macOS)

╔═══════════════════════════════════════╗
║   Windows / macOS Host OS             ║
║                                       ║
║  ╔═══════════════════════════════╗  ║
║  ║ Docker Desktop (приложение)   ║  ║
║  ║                               ║  ║
║  ║ Hyper-V / Hyperkit (гипервизор)║  ║
║  ║                               ║  ║
║  ║ ╔──────────────────────────╗  ║  ║
║  ║ ║ Linux VM (Alpine/Ubuntu) ║  ║  ║
║  ║ ║                          ║  ║  ║
║  ║ ║ Docker Engine            ║  ║  ║
║  ║ ║                          ║  ║  ║
║  ║ ║ ┌─────┬─────┬─────────┐ ║  ║  ║
║  ║ ║ │Con1 │Con2 │ Con3    │ ║  ║  ║
║  ║ ║ └─────┴─────┴─────────┘ ║  ║  ║
║  ║ ╚──────────────────────────╝  ║  ║
║  ╚═══════════════════════════════╝  ║
╚═══════════════════════════════════════╝

Когда гипервизор критичен для Docker разработчика

Сценарий 1: Docker Desktop на macOS

# Docker Desktop использует Hyperkit (гипервизор)
docker stats

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

Сценарий 2: Разработка на Linux сервере

# На чистом Linux гипервизор НЕ нужен
# Docker напрямую работает с ядром

docker run --cpus="1.5" --memory="512m" myapp
# Использует cgroups, не гипервизор

Сценарий 3: Nested Virtualization

# Если нужно запустить Docker внутри ВМ
vagrant box add ubuntu/focal
vagrant init ubuntu/focal
vagrant up  # Запускает ВМ через гипервизор

# Внутри ВМ
vagrant ssh
docker ps  # Docker работает внутри ВМ, внутри гипервизора

Таблица: гипервизоры и Docker

ОС хостаDocker EngineГипервизорОписание
LinuxNativeНе нуженПрямое использование ядра
WindowsDesktopHyper-VЛёгкая VM с Linux внутри
macOS IntelDesktopVirtualBox/HyperkitЛёгкая VM с Linux
macOS Apple SiliconDesktopHyperkit/ParallelsОптимизированная VM
Windows WSL2Native WSL2Hypervisor (встроенный)Встроенная гипервизация

Заключение

Гипервизор в контексте Docker — это инструмент, который обеспечивает запуск Docker на ОС, отличных от Linux. На самом Linux Docker не использует гипервизор и работает напрямую с ядром через cgroups и namespaces, что делает его очень эффективным.

Ключевой момент: при разработке на macOS/Windows ты на самом деле работаешь с Linux VM, запущенной гипервизором, внутри которой работает Docker. На Linux — всё проще, гипервизор не нужен.