Docker 镜像 OpenJDK 基础镜像选型

4,724 阅读4分钟

docker image使用openjdk的问题

为什么写这篇文章,原因很简单就是docker hub里面托管的openjdk image已经不适合作为java项目的基础镜像用到生产环境!!!

我们以前在编写dockerfile时一般喜欢使用openjdk,比如我们会这样写自己的dockerfile:在FROM里面引用openjdk作为基础镜像,其实现在已经非常不合适了。 image.png

openjdk docker image已经只是预发布/非生产环境使用的构建了,它实际上被官方宣布为弃用,不再适合生产环境使用。全部的以前使用openjdk作为基础镜像的项目,现在强烈推荐尽快(ASAP:as soon as possible)的替换为openjdk的合适的替代品。 image.png

备选的jdk image

实际上备选的jdk也有很多,它们几乎都是基于openjdk的并都保证和openjdk完全兼容。

这里列出如下的几种非常有保障的替代品

名称发行商备注
Amazon Corretto imageAWS&AmazonAmazon Corretto提供的完全免费、多平台、生产就绪型发行版,提供长期支持,其中包括性能增强和安全修复。它基于openjdk,承诺100%兼容openjdk;在紧密跟进openjdk的同时,AWS&Amazon也会做例行的安全修复和性能增强。是目前最受欢迎的JDK:Java 17 采用率飙升四倍,Amazon 成最受欢迎 JDK 供应商
Eclipse Temurin imageEclipse AdoptiumEclipse Temurin 是 Eclipse Adoptium 项目的一部分,Eclipse Temurin是 OpenJDK 的免费、开源、生产就绪的实现。Temurin 是 Oracle JDK 的完全兼容的替代品,并提供与 Oracle JDK 相同的功能和性能。
IBM Semeru Runtimes imageIBM semeruIBM Semeru是基于openj9 JVM的JDK,这是它和其他JDK最大的区别,其他的发行版基本都是hotspot JVM。但是IBM Semeru是完全兼容Oracle JDK和openjdk的,它经过了Java TCK 认证,以前运行在普通openjdk上的程序可以完全正常的运行在IBM Semeru上。从实现上讲IBM Semeru结合了openjdk的类库和openj9 jvm,openj9实际上也是IBM自研的非常有特色的高性能的JVM,和hotspot一样经受了长时间的生产环境考验,openj9主要是在IBM的大型机和服务器上使用,满足IBM的客户提出的高稳定性和高性能需求。
AzulAzulAzul是专注于JVM研发的商业软件提供商,也是全球最大的OpenJDK商业版提供商,它的产品在高性能场景下有不少的用户使用。它同时提供免费的Zulu JDK(基于openkdk)和Azul Platform Prime(自研Zing JDK),Azul虽然是商业公司但是在JVM领域非常有技术影响力: Azul Systems 是家什么样的公司?
Tencent konajdk image腾讯云腾讯 Kona 是一个基于 OpenJDK 定制的,生产环境可用,高性能,安全稳定,兼容多种运行平台的 OpenJDK 开源发行版本。提供企业级 JDK 服务,由腾讯专业技术团队提供技术维护、性能优化及安全保障等服务,为您提供最优的 Java 云生产环境及解决方案。Kona docker image其实对ARM的支持不是很好(2023/08只有X64版本的image)
Alibaba Dragonwell image阿里云Alibaba Dragonwell 是一款免费的, 生产就绪型Open JDK 发行版,提供长期支持,包括性能增强和安全修复。阿里巴巴拥有最丰富的Java应用场景,覆盖电商,金融,物流等众多领域,世界上最大的Java用户之一。Alibaba Dragonwell作为Java应用的基石,支撑了阿里经济体内所有的Java业务。Dragonwell 在docker hub上的文档和维护好像没有上述的其他家用心,基本没什么文档

从流行程度,文档完善程度,长期维护/支持力度,开源程度,厂商中立性来讲,国外的主流的JDK发行版有明显优势,它们的文档更完善,社区更大,对openjdk的兼容性和维护力度更好,在功能上没有大的魔改或者添加openjdk本身没有的自定义特性,可以当原滋原味的openjdk来使用,没有厂商绑定。所以比较推荐Eclipse Temurin imageAmazon Corretto image。如果你使用某个云服务商或者喜欢尝试openjdk之外特性,IBM Semeru Runtimes image和阿里/腾讯的JDK可以考虑。国内云服务商一般都在openjdk基础上加一些为特定场景优化的新特性,比如kona jdk加了Vector API和KonaFiber协程方案等,这些新特性在openjdk中暂时没有或者会在以后以另外的方式实现类似功能,一般我们的项目没有非常强的性能或者场景需求不建议提前使用这些特性,因为后续的openjdk不一定就能和这些特性兼容。

参考: