Получить доступ

Чем контейнер отличается от виртуальной машины?

JuniorDocker и контейнерыDocker
Ещё спрашивают так:
  • Что такое namespaces и cgroups?
Коротко

Виртуальная машина эмулирует оборудование и запускает собственное ядро ОС поверх гипервизора. Контейнер — обычный процесс хоста, изолированный механизмами общего ядра: namespaces (свои PID, сеть, файловая система, пользователи) и cgroups (лимиты CPU и памяти). Контейнер стартует за доли секунды и весит мегабайты; изоляция слабее, чем у ВМ.

  • Ядро общее — контейнер с Linux-ядром не запустить на Windows без ВМ
  • Уязвимость ядра затрагивает все контейнеры хоста
  • Для мультитенантности со строгой изоляцией — ВМ или песочницы (gVisor, Firecracker)

А ещё Образ — шаблон файловой системы, контейнер — запущенный процесс из образа

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Namespaces:

  • pid — свой PID 1 и дерево процессов;
  • net — свои интерфейсы, IP, порты;
  • mnt — своя файловая система (корень из образа);
  • uts — имя хоста;
  • ipc, user — разделяемая память, отображение пользователей.

Cgroups ограничивают и учитывают ресурсы: CPU, память, ввод-вывод, число процессов. Отсюда OOMKilled в контейнере при свободной памяти хоста.

Сравнение:

виртуальная машинаконтейнер
ядросвоёобщее с хостом
запускдесятки секунддоли секунды
размергигабайтымегабайты
изоляциясильнаяслабее
плотностьдесятки на хостсотни на хост

На практике их сочетают: контейнеры запускают внутри виртуальных машин облака.

Что хотят услышать

  • Общее ядро против собственного.
  • Namespaces и cgroups.
  • Компромисс скорости и изоляции.

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем