В чем разница между Docker, KVM и LXC?

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

Ответ

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

Аспект Docker (Контейнеры) LXC (Контейнеры ОС) KVM (Аппаратная виртуализация)
Уровень изоляции Процессы (namespaces, cgroups) Операционная система (более полная ОС) Аппаратное обеспечение (гипервизор)
Ядро Общее ядро хоста Общее ядро хоста Собственное ядро в каждой ВМ
Запуск Мгновенный (секунды) Быстрый (секунды) Медленный (минуты на загрузку ОС)
Плотность Очень высокая Высокая Низкая (тяжелые ВМ)
Изоляция/Безопасность Хорошая (уязвимости ядра общие) Лучше, чем у Docker Полная (сильная граница)
Типичное использование Микросервисы, упаковка приложений Системные контейнеры, легкие ВМ Полноценные серверы, legacy-приложения, multi-tenant

Практический взгляд DevOps:

  • Docker — это наш основной инструмент для упаковки приложений и их зависимостей. Мы создаем легковесные, переносимые образы для CI/CD и развертывания в оркестраторах (Kubernetes).
  • LXC/LXD может использоваться для изоляции целых сред (например, для запуска нескольких экземпляров системы сборки или тестовых сред), где нужна более полная ОС, но не гипервизор.
  • KVM (через управляющие платформы вроде Proxmox, oVirt или облачных провайдеров) мы применяем для создания виртуальных машин, которые выступают в роли физических хостов для наших Kubernetes-кластеров (нод), баз данных или других систем, требующих полной изоляции и собственного ядра.

Пример из практики: На одном физическом сервере с помощью KVM можно запустить 5-10 ВМ. На каждой из этих ВМ (уже как на хосте) с помощью Docker можно запустить десятки контейнеров с микросервисами.