【发布时间】:2019-03-18 22:28:10
【问题描述】:
一点背景。
我的目标是在 ARM64 上使用 JRE 创建一个超薄的 docker 映像。 以下是我可以影响最终图像大小的可能区域。
- 使用 JAVA 9 及更高版本允许我利用新的 Java 模块功能。
- 将 Alpine 用于 ARM64 可提供超薄的基础映像。
到目前为止我做了什么: 有针对 ARM64 的 OpenJDK 9 及更高版本,使用模块功能我得到了大约 30M 的 JRE 大小,这是一个了不起的成就。
现在我正在着手迁移到 Alpine 基础映像,它需要使用 musl-libc 编译 OpenJDK。 我设法用glibc重新编译了最新的OpenJDK,我的问题是用musl libc编译OpenJDK 9有多复杂,我的理解是,glibc和musl暴露了相同的接口,基本上,OpenJDK应该与musl-libc兼容。
我们将不胜感激任何应对这一挑战的方向。
【问题讨论】:
-
OpenJDK 是 Alpine 的官方 Java 实现并且支持 musl,所以在 Alpine 上构建 musl 应该很简单。您可以从 Portola 主页开始:openjdk.java.net/projects/portola。实验性 jdk9 fork 在这里:hg.openjdk.java.net/portola/jdk9
-
请注意,Alpine 上只有 OpenJDK 7 和 8 被 GA'd;然后有 11 个早期访问版本,现在已经消失了。 9号和10号没有发布。因此,虽然您可以尝试自己构建 Portola 分支,但您可能会遇到实现本身的功能问题。这是主要问题,IMO。
-
实际上,OpenJDK 12 早期访问仅在 3 天前才可用(对于 x64:jdk.java.net/12),因此它似乎正在积极开发中 - 您可能会考虑,而不是 9。很有可能,它会状态更好,并且可能会在 12 正式版中看到修复。
-
Valiano,非常感谢您的建议。您提到的 OpenJDK 11 在 x86 上为我工作,但我没有在 ARM64 上找到适用于 Alpine 的 OpenJDK 11 版本。
-
当然,丹尼斯。不幸的是,我估计早期访问版本仅适用于 x64。我找不到任何现成的 ARM64 musl 构建 - 我最接近的是 Aleksey Shipilëv 的 CI 站点上的 ARM32 构建:builds.shipilev.net
标签: java docker arm64 alpine musl