В чем преимущества использования Docker по сравнению с виртуальной машиной
Что проверяют
Понимаете ли вы, что контейнер разделяет ядро хоста, и следует ли из этого всё остальное.
Как отвечать
Ключевое отличие одно: виртуальная машина несёт своё ядро и эмулируемое оборудование, а контейнер использует ядро хоста. Контейнер это процесс, изолированный средствами самого ядра: пространства имён отделяют его файловую систему, сеть и список процессов, а контрольные группы ограничивают ресурсы.
Отсюда преимущества:
- скорость запуска: доли секунды против десятков секунд, потому что ядро уже загружено;
- накладные расходы близки к нулю: нет гипервизора и второй операционной системы, память тратится только на сам процесс;
- плотность: на одном сервере сотни контейнеров вместо десятка виртуальных машин;
- размер образа: десятки мегабайт против гигабайтов, а слои переиспользуются между образами;
- воспроизводимость окружения: Dockerfile описывает сборку кодом, образ становится артефактом, и «у меня работает» перестаёт быть аргументом;
- удобство конвейера: тот же образ проходит тесты и уезжает в прод.
Недостатки называть обязательно, иначе ответ выглядит рекламой:
- изоляция слабее: ядро общее, поэтому уязвимость в ядре затрагивает все контейнеры сразу. Для запуска недоверенного чужого кода берут виртуальные машины или облегчённые их варианты;
- нельзя другое ядро: контейнер Linux на macOS или Windows на самом деле работает внутри скрытой виртуальной машины, отсюда и потери производительности на этих системах;
- состояние: контейнер эфемерен, данные надо выносить в тома, и это отдельная дисциплина.
Правильный вывод: это не замена, а разные инструменты. Виртуальные машины дают границу безопасности и разные ядра, контейнеры дают скорость и повторяемость. В облаке они обычно сочетаются: контейнеры внутри виртуальных машин.
Где спотыкаются
Говорят «контейнер это лёгкая виртуальная машина» и не могут объяснить, что именно легче.
Считают изоляцию контейнера равной изоляции виртуальной машины.
Не знают, что образ Linux на macOS работает через скрытую виртуальную машину.
Не упоминают тома и считают контейнер местом для хранения данных.