繁体   English   中英

Docker 容器与 Java 虚拟机

[英]Docker container vs Java Virtual Machine

如果有人愿意,现在在 docker 容器中所做的事情在很大程度上也可以在 java 中使用 jvm 来完成,这是真的吗?

除了能够用您自己的语言编写应用程序并具有很大的定制灵活性之外,docker 是否基本上可以做 Java 多年来对其虚拟机所做的事情? 即它提供了与底层操作系统分离的可执行环境。

通常Docker容器不能在“Java内”完成,因为Docker用于封装应用程序,而“Java内”是JVM启动后加载的代码。

JVM 在解析将搜索main方法的类时已经在运行。 因此无法在进程级别进行封装,因为进程(JVM)已经在运行。

Java 具有封装技术,可以在各种 Java 元素之间提供保护(例如,请参见 Tomcat 中的类加载器层次结构); 但是那些只是将“应用程序插件”彼此隔离开来,运行它们的主要进程是 Tomcat,它实际上是一个加载到已经运行的 JVM 中的程序。

这并不意味着您不能将两者结合起来实现某个目标,只是意味着这两种产品之间提供的隔离类型不可互换。

现在在 docker 容器中完成的工作也可以在 java 中使用有人想要的 jvm 完成

简短回答:不可以。您可以将 docker 容器包装在 JVM 周围,但不能将 JVM 包装在 docker 容器周围,这很重要。

docker 基本上做 Java 多年来一直在用它的虚拟机做的事情? 即它提供了与底层操作系统分离的可执行环境。

Docker 容器在不引入虚拟化层的情况下提供与其他容器的隔离。 因此,它们与 VM 不同且性能更高。

Docker 可以执行 Java JVM 无法完成的一些事情,但是,使用 Java 编程并在 JVM 上运行将提供在 Docker 容器中运行的几个优点。 我从事一个大型 Java 项目,这个项目已有 20 年历史。 这些年来,我们一直在发展和修复我们的应用程序,没有任何工具或兼容性问题。 此外,作为奖励,该应用程序是独立于平台的。 它的几个组件可以在 Windows 和 Linux 中运行。 因为最初没有努力构建多平台应用程序,所以有一个组件不能在 Linux 上运行。 但是让它在那个平台上工作相对容易。 使用 C 或 C++ 和相关工具链做同样的事情会困难得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM