← Назад к списку
ТехническаяDevOps и SREJunior

Чем контейнер отличается от виртуальной машины? За счёт чего достигается изоляция контейнеров в Linux?

Короткий ответ

  • ВМ виртуализирует железо и несёт полное ядро ОС
  • Контейнер — это процесс с изоляцией средствами ядра хоста
  • Namespaces изолируют видимость: PID, сеть, файловую систему, пользователей
  • Cgroups ограничивают ресурсы: CPU, память, I/O
  • Слоистые образы и union-файловые системы экономят место
  • Контейнеры легче и быстрее стартуют, но изоляция слабее, чем у ВМ

Контейнер — изолированный процесс на общем ядре, а ВМ — отдельная ОС на виртуальном железе.

Как сказать вслух

пример ответа

Виртуальная машина эмулирует целый компьютер с собственным ядром, поэтому она тяжёлая и долго стартует. Контейнер — это обычный процесс Linux, которому ядро через namespaces ограничивает видимость системы, а через cgroups — ресурсы. Все контейнеры делят ядро хоста, поэтому они лёгкие, но изоляция слабее, чем у виртуалки. На практике это компромисс между плотностью размещения и безопасностью.

Подробный ответ

Основной ответ

ВМ работает поверх гипервизора (KVM, ESXi) и включает собственное ядро и ОС, что даёт сильную изоляцию ценой накладных расходов. Контейнер — процесс, запущенный с набором namespaces (pid, net, mnt, uts, ipc, user, cgroup), которые изолируют его представление о системе, и с cgroups, ограничивающими CPU, память и I/O. Файловая система собирается из слоёв образа через overlayfs, сверху добавляется записываемый слой. Дополнительно применяются capabilities, seccomp и AppArmor/SELinux для сужения прав. Поскольку ядро общее, уязвимость ядра потенциально затрагивает все контейнеры — для недоверенных нагрузок используют микро-ВМ (Kata, Firecracker) или gVisor.

Ключевые моменты

  • Namespaces. Изолируют видимость: свой PID 1, свой сетевой стек, своё дерево монтирования у каждого контейнера.
  • Cgroups. Ограничивают потребление ресурсов; именно на них опираются limits в Kubernetes и OOM kill контейнеров.
  • Слоистые образы. Слои неизменяемы и переиспользуются между образами, что ускоряет сборку и доставку.
  • Границы изоляции. Общее ядро — главный риск; для усиления есть user namespaces, rootless-режим и песочницы типа gVisor.

Практический контекст

Вопрос проверяет, понимает ли кандидат, что Docker — не магия, а обёртка над механизмами ядра. В работе это знание нужно при отладке: почему контейнер убит по OOM, почему процесс виден с хоста, почему «docker exec» попадает внутрь. Интервьюеры часто копают глубже: просят назвать конкретные namespaces или объяснить, что происходит при docker run.

Частые ошибки

  • Говорят «контейнер — это маленькая виртуалка», не упоминая общее ядро
  • Не могут назвать namespaces и cgroups как механизмы изоляции
  • Утверждают, что контейнеры по умолчанию безопаснее ВМ

ИП Кочкин Алексей Сергеевич · ИНН 390509026279 · ОГРНИП 325390000030973 · jiniys2005@yandex.ru