在 docker 之上运行的容器和在 JVM 之上运行的自包含 Java 程序之间的最大区别是什么?
我假设两者都直接在没有底层可视化的物理 linux 服务器上运行。
在 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程序是操作系统内核上的一个进程。JVM 正在运行,它执行作为 java 程序的字节码。Java 程序可以使用任意数量的资源(取决于 JVM 限制),并以它喜欢的任何方式使用操作系统。
docker 容器是操作系统虚拟化的一种实现。理解容器的最简单方法是使用虚拟化提供操作系统的独立部分。容器的资源使用可以被限制并且可以被隔离,因此它不知道容器之外的系统的任何部分,比如文件系统、网络、进程。内核提供了特定的功能——用于提供容器的 CGroups 和 Namespaces。