Что именно изолирует контейнер
Контейнер создаёт для программы отдельное окружение, но не запускает второй экземпляр всей операционной системы. В Linux это достигается средствами ядра: пространства имён дают процессам собственный вид на процессы, сеть, пользователей и файловую систему, а контрольные группы ограничивают расход памяти и процессорного времени. Поэтому приложение может выглядеть так, будто работает в своей системе, хотя команды оборудования и управление памятью по-прежнему выполняет общее ядро.
Образ контейнера обычно содержит само приложение и нужные ему библиотеки и файлы. Это помогает запускать одинаковое окружение на разных машинах, но не отменяет требования к ядру: контейнер должен использовать ядро системы, на которой работает. Например, контейнер с программой для Linux не становится полноценной Linux-системой только потому, что в образе собраны её файлы.
Почему контейнеры запускаются быстро
При старте не нужно загружать отдельное ядро и проходить обычную последовательность запуска операционной системы. Создаются изолированные процессы, подключаются файлы и применяются ограничения. Из-за этого контейнеры обычно легче и быстрее виртуальных машин, а на одном сервере их можно разместить больше.
Но изоляция здесь не равна отдельному компьютеру. Если у общего ядра возникает проблема, она может затронуть сразу несколько контейнеров; а ошибка в настройке доступа способна ослабить границы между ними. Поэтому контейнеры удобны для упаковки и запуска приложений, но сами по себе не заменяют все меры безопасности.
Когда нужна виртуальная машина
Виртуальная машина эмулирует отдельный компьютер и загружает собственную операционную систему со своим ядром. Это требует больше ресурсов, зато позволяет запускать разные системы на одном физическом сервере и создаёт более самостоятельную границу изоляции.
Практический выбор зависит от задачи: контейнер экономит ресурсы, когда приложения могут пользоваться общим ядром; виртуальная машина полезна, когда нужна отдельная операционная система. На одном сервере контейнеров может быть много — но их базовая связь с машиной всё равно проходит через одно ядро.






