Linux 容器与 JVM

Linux Container vs JVM

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

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

JVM 之上的 java 程序 运行 将是一个 Linux 进程。 JVM 在进程内部运行,并解释(或编译)您的 类.

中的 Java 字节代码

一个docker容器比较重量级。有 docker 守护进程,docker 容器,它实际上是一个虚拟化的 Linux 实例,然后是你的 JVM 运行。

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

它们有很大的不同。 java 程序是 OS 内核上的进程。 JVM 是 运行,它执行作为 java 程序的字节码。 java 程序可以使用任意数量的资源(取决于 JVM 限制),并以任何它喜欢的方式使用操作系统。

一个docker容器是操作系统虚拟化的一个实现。理解容器的最简单方法是它使用虚拟化提供操作系统的独立部分。容器的资源使用可以被限制和隔离,这样它就不知道容器外系统的任何部分,比如文件系统、网络、进程。内核提供特定功能 - 用于提供容器的 CGroups 和命名空间。