Linux容器vs JVM

在Docker上运行的容器和在JVM之上运行的自包含的Java程序之间的区别是什么?

我假设两者都直接在物理linux服务器上运行,而没有底层的可视化。

运行在JVM之上的Java程序将是一个单独的Linux进程。 JVM在进程内运行,并解释(或编译)类中的Java字节码。

docker集装箱更重量级。 Docker守护进程,docker容器,实际上是一个虚拟化的Linux实例,然后是你的JVM。

我发现https://docs.docker.com/engine/getstarted/step_one/和https://docs.docker.com/engine/userguide/eng-image/baseimages/很有帮助。

他们是显着不同的。 Java程序是OS内核上的一个进程。 JVM正在运行,它执行java程序的字节码。 Java程序可以使用任何数量的资源(取决于JVM限制),并以任何喜欢的方式使用操作系统。

Docker容器是操作系统虚拟化的一个实现。 理解容器最简单的方法就是使用虚拟化提供独立的操作系统分区。 容器的资源使用可以是有限的,可以被隔离,使得它不知道容器外部的系统的任何部分,如文件系统,networking,进程。 内核提供了特定的function – 用于提供容器的CGroups和Namespaces。