Виртуальная машина эмулирует целый компьютер с отдельной ОС — это гигабайты памяти и минуты на запуск. Контейнер использует ядро хостовой ОС и изолирует только процесс — это мегабайты и секунды.
VM: гипервизор (VMware, KVM) → гостевая ОС → приложение. Полная изоляция, но тяжеловесно. Контейнер: Docker engine → namespaces + cgroups → приложение. Лёгкая изоляция, общее ядро.
На одном сервере можно запустить сотни контейнеров, но только десятки VM. Контейнеры стартуют за секунды, VM — за минуты. Зато VM обеспечивает более сильную изоляцию — если нужна безопасность на уровне ядра, VM надёжнее.