Чем контейнер отличается от виртуальной машины?
- Что такое namespaces и cgroups?
Виртуальная машина эмулирует оборудование и запускает собственное ядро ОС поверх гипервизора. Контейнер — обычный процесс хоста, изолированный механизмами общего ядра: namespaces (свои PID, сеть, файловая система, пользователи) и cgroups (лимиты CPU и памяти). Контейнер стартует за доли секунды и весит мегабайты; изоляция слабее, чем у ВМ.
- Ядро общее — контейнер с Linux-ядром не запустить на Windows без ВМ
- Уязвимость ядра затрагивает все контейнеры хоста
- Для мультитенантности со строгой изоляцией — ВМ или песочницы (gVisor, Firecracker)
А ещё Образ — шаблон файловой системы, контейнер — запущенный процесс из образа
Подробно
Namespaces:
- pid — свой PID 1 и дерево процессов;
- net — свои интерфейсы, IP, порты;
- mnt — своя файловая система (корень из образа);
- uts — имя хоста;
- ipc, user — разделяемая память, отображение пользователей.
Cgroups ограничивают и учитывают ресурсы: CPU, память, ввод-вывод, число процессов. Отсюда OOMKilled в контейнере при свободной памяти хоста.
Сравнение:
| виртуальная машина | контейнер | |
|---|---|---|
| ядро | своё | общее с хостом |
| запуск | десятки секунд | доли секунды |
| размер | гигабайты | мегабайты |
| изоляция | сильная | слабее |
| плотность | десятки на хост | сотни на хост |
На практике их сочетают: контейнеры запускают внутри виртуальных машин облака.
Что хотят услышать
- Общее ядро против собственного.
- Namespaces и cgroups.
- Компромисс скорости и изоляции.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓ВМ — со своим ядром, контейнер — процесс на общем ядре хоста
- ✗Контейнер запускает своё ядро ОС поверх хоста, а ВМ использует ядро хоста напрямую
- ✗ВМ стартует быстрее контейнера, потому что ядро уже загружено
- ✗Изоляция контейнера сильнее, чем у ВМ, — за счёт namespaces и cgroups
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.