Контейнер Linux против JVM

Какая большая разница между контейнером, работающим поверх докеров и автономной программой Java, запущенной поверх JVM?

Я предполагаю, что оба они работают непосредственно на физическом сервере Linux без базовой визуализации.

Ответ 1

Программа java, работающая поверх JVM, будет единственным процессом Linux. JVM запускается внутри процесса и интерпретирует (или компилирует) байт-код Java в ваших классах.

Контейнер для докеров больше тяжеловес. Там демон docker, контейнер докеров, который на самом деле является виртуализированным экземпляром Linux, а затем ваша JVM работает под этим.

Я нашел https://docs.docker.com/engine/getstarted/step_one/ и https://docs.docker.com/engine/userguide/eng-image/baseimages/ полезно.

Ответ 2

Они значительно отличаются. Java-программа - это процесс в ядре ОС. Работает JVM, которая выполняет байт-код, который является программой java. Программа java может использовать любое количество ресурсов (в зависимости от ограничений JVM) и использовать операционную систему любым способом, который ей нравится.

Контейнер-докер - это реализация виртуализации операционной системы. Самый простой способ понять контейнеры будет заключаться в том, что он обеспечивает независимый срез операционной системы, использующий виртуализацию. Использование ресурсов контейнера может быть ограничено и может быть изолировано, так что оно не знает какой-либо части системы вне контейнера, подобно файловой системе, сети, процессов. Ядро предоставляет определенные функции - CGroups и пространства имен, которые используются для предоставления контейнеров.