Правильно ли мое понимание виртуальных машин и контейнеров Docker?
Какие проблемы они пытаются решить:
Запуск программы в среде, для которой она не предназначена, без необходимости ее модификации. Особенно запуск двух программ одновременно в среде, где это обычно невозможно сделать. Примеры:
- под управлением двух ОС, то есть Windows 10 и Ubuntu 18.10 на одной машине одновременно
- запуск двух программ, которым требуется разная версия среды выполнения (т. е. узел 6 и узел 10) одновременно
Общая идея для достижения этого:
изоляция
Части программного обеспечения не знают друг о друге и базовой системе, которая используется, чтобы заставить это работать (если мы явно не разрешаем разделение определенных ресурсов)
Ссылка поп-культуры:
Трумэн шоу.
Часть программного обеспечения, которая запускается внутри виртуальной машины или контейнера-докера, похожа на Трумэна: она не знает, что среда, в которой он живет, - это просто песочница, изолированная от реального мира, и все, что происходит внутри, организуется и отслеживается сторонними разработчиками.: бегуны шоу (демон гипервизора или докера соответственно). Но иногда случается, что приложение испытывает какое-то странное / нереальное поведение (поскольку шоураннеры не идеальны).
Чем они отличаются:
Виртуальная машина - это абстракция аппаратного уровня (виртуальная машина эмулирует реальную машину), в то время как контейнер Docker является абстракцией уровня приложения (она "эмулирует" среду ОС, в которой контейнеры совместно используют ядро хоста и имеют собственную файловую систему, пространство имен и сеть).