Чем контейнер отличается от виртуальной машины?
Основы Docker
Контейнер разделяет ядро ОС с хостом и изолирует только процессы, а виртуальная машина эмулирует целый компьютер и запускает собственное ядро гостевой ОС.
Различия
- VM: гипервизор виртуализует железо, внутри — полноценная гостевая ОС. Накладные расходы: гигабайты памяти и минуты на загрузку.
- Контейнер: изоляция средствами ядра Linux — namespaces (процессы, сеть, ФС) и cgroups (лимиты CPU и памяти). Гостевой ОС нет, старт за миллисекунды.
Следствия
- Контейнеры плотнее: на одном хосте их помещаются десятки.
- VM изолирует сильнее: отдельное ядро — дополнительный барьер безопасности.
- Контейнер зависит от ядра хоста: Linux-контейнер не запустится нативно на Windows без слоя виртуализации.
Типичный фоллоу-ап
«Docker — это легковесная VM?» Нет: Docker использует namespaces и cgroups, а на macOS и Windows как раз поднимает скрытую Linux-VM, чтобы предоставить ядро.
Коротко для собеседования
Контейнер делит ядро хоста и изолирует процессы, VM эмулирует целую машину со своей ОС. Контейнеры легче и быстрее стартуют, VM изолированы сильнее.