我正在尝试为一个纤细的Docker镜像提供一个最小的JRE。在Ubuntu上的open-jdk-11附带的jlink 11.0.4中,使用此自定义JRE构建的镜像实际上比使用默认JRE构建的镜像要大。我认为这是由于cutom_jre/lib/server/libjvm.so非常大
我在Linkedin Learning上关注来自Arun Gupta的Kubernetes for Java Developers。在某种程度上,我注意到我的Ubuntu实例上有一个奇怪的行为。除了本课程之外,我还需要为一个最小的Spring Boot应用程序提供一个自定义的JRE,以便将其用于精简的Docker映像。
jlink \
--output myjre \
--add-modules $(jdeps --print-module-deps target/greeting.jar),\
java.xml,jdk.unsupported,java.sql,java.naming,java.desktop,\
java.management,java.security.jgss,java.instrument \这种方法在课程中运行良好,my_jre的大小适合为应用程序构建最小的Docker映像。问题是在我的设置中,我使用的是openjdk-11,而不是openjdk-9。
使用我的设置,my_jre的结果大小将非常大(~380MB)。经过一些调查,我发现这主要是,也可能只是由于my_jre/lib/server/libjvm.so的大小。
在这次尝试之前,我没有任何使用jlink的经验。经过一些尝试和错误,并浏览了github上的类似问题,我发现了一种jlink功能之外的解决方法。
使用Docker标志运行strip实用程序将使libjvm.so变得更小,并实现主要目标:为纤细的Docker镜像提供最小的--strip-unneeded (~113MB)。
strip -p --strip-unneeded myjre/lib/server/libjvm.so我希望有知识的人能更深入地解释一下这种才华的背景。另外,在此行为方面,从jdk9到jdk11有什么变化?除了jdk9+提供的实用程序之外,是否有任何标准流程可以在没有任何外部实用程序的情况下实现此目标?
发布于 2020-07-17 14:14:15
可以使用其他选项来减小jlink中的大小。
--strip debug --no-header-files --no-man-pages
有关帮助,请参阅"jlink -- help“
我还尝试创建自定义JRE。我得到了将近415MB的libjvm.so。使用上面提到的选项,我得到了39.7MB的JRE大小。
https://stackoverflow.com/questions/58045819
复制相似问题