Docker容器与Java虚拟机

时间:2016-12-20 22:56:37

标签: java docker jvm containers virtualization

是否真的可以说,在很高的程度上,现在在docker容器中所做的事情也可以在java中用jvm完成,如果有人想要的话?

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

3 个答案:

答案 0 :(得分:4)

一般来说,Docker容器无法在“Java内”完成,因为Docker用于封装应用程序,“Java内部”是JVM启动后加载的代码。

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

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

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

答案 1 :(得分:3)

  

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

完成

简答:不可以。你可以在你的JVM周围包装一个docker容器,但不能轻易地将一个JVM包装在一个docker容器周围。

  

docker基本上做了Java多年来对其虚拟机所做的事情?即它提供与底层OS分开的可执行环境。

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

答案 2 :(得分:0)

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