我正在学习 CoreOS/Docker 并试图将我的思想集中在一些事情上。
有了 Java 基础设施,是否可以在它自己的容器中使用 JVM 并让其他 Java 应用程序/服务使用这个 JVM 容器?如果没有,我假设 JVM 必须捆绑在每个容器中,因此基本上您必须拉取 Java dockerfile 并合并我的 Java 服务;本质上是创建一个运行在 CoreOS 机器之上的 Linux 机器 + Java + 服务容器。
我唯一的想法是可以在 CoreOS 本身上运行 JVM,但似乎这是不可能的。
最佳答案
实际上可以在 /opt
中解压 Orcale Java,但这只是一种最后的手段。 JRE 和 JDK 的 Oracle 二进制文件不需要任何系统库,因此在任何地方都非常容易。
我写了一些非常小的 JRE和 JDK图片,我可以用它来运行 Elasticsearch和其他主要的开源应用程序。我还编写了一些容器,允许我在 CoreOS 上编译 jar(errordeveloper/mvn、errordeveloper/sbt 和 errordeveloper/lein)。
正如@ISanych 所指出的,运行多个 Java 容器不会影响磁盘使用,这几乎等同于在主机上运行多个 JVM。如果您发现运行多个 JVM 不太适合您,那么答案是 JVM 不必像它之前存在的容器那样复杂。但是,容器中的 Java 仍然非常好,因为您可以拥有一个永远固定的类路径,而不会陷入依赖 hell 。也许不是构建 uberjars(这是我最常做的,尽管众所周知它们是 not exactly perfect,但我很懒)一个人可以将 jars 打包在 tarball 中,然后使用 ADD jars.tar/app/lib/
在他们的 Dockerfile 中。
关于Docker/CoreOS 上的 Java JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27280082/