我想获取一个Docker镜像来构建Java应用程序,正在查看可用的OpenJDK镜像变体。 我在这里查看https://github.com/docker-library/openjdk/tree/master/8/jdk,看到了alpine、slim和windows。 它们之间有什么区别,每个变体又提供了什么?
我想获取一个Docker镜像来构建Java应用程序,正在查看可用的OpenJDK镜像变体。 我在这里查看https://github.com/docker-library/openjdk/tree/master/8/jdk,看到了alpine、slim和windows。 它们之间有什么区别,每个变体又提供了什么?
openjdk:12
开始,默认镜像以及-oracle
和-oraclelinux7
变体都基于官方Oracle Linux 7 image。默认镜像中的OpenJDK二进制文件以及-oracle
和-oraclelinux7
变体是由Oracle构建并来自OpenJDK community。
openjdk:<version>-slim
此镜像仅包含运行Java所需的最小软件包(例如,缺少许多与UI相关的Java库)。除非您在仅部署openjdk
镜像且有空间限制的环境中工作,否则建议使用默认镜像。
openjdk:<version>-windowsservercore
此镜像基于Windows Server Core (microsoft/windowsservercore
)。
openjdk
镜像有许多不同的变体,每个变体都是为特定的用例而设计的。
openjdk:<version>
这是事实上的标准镜像。如果您不确定自己的需求,那么您可能想使用这个。它既可以作为一次性容器(挂载源代码并启动容器以启动应用程序),也可以作为构建其他镜像的基础。
其中一些标签可能会带有像jessie或stretch之类的名称。这些是Debian版本的套件代码名称,表示该镜像基于哪个发行版。
openjdk:<version>-alpine
此镜像基于流行的Alpine Linux项目,可在官方alpine
镜像中获得。 Alpine Linux比大多数发行版基本映像(~5MB)小得多,因此通常会导致更瘦的映像。
当需要使最终镜像大小尽可能小时,强烈推荐使用此变体。要注意的主要注意事项是它确实使用musl libc而不是glibc和朋友们,因此某些软件可能会遇到问题,具体取决于其libc要求的深度。但是,大多数软件都没有这个问题,因此这个变体通常是一个非常安全的选择。请参见此Hacker News评论线程以获取更多讨论可能出现的问题以及使用基于Alpine的映像的一些赞成/反对比较。
为了最小化镜像大小,通常不会在基于Alpine的映像中包括其他相关工具(例如git
或bash
)。使用此镜像作为基础,在您自己的Dockerfile中添加所需的内容(如果您不熟悉,请参见alpine
镜像描述中有关如何安装软件包的示例)。
openjdk:<version>-windowsservercore
此镜像基于Windows Server Core
(microsoft/windowsservercore
)。因此,它仅适用于那个镜像可以使用的地方,例如Windows 10 Professional/Enterprise(Anniversary Edition)或Windows Server 2016。
有关如何在Windows上运行Docker的信息,请参见Microsoft提供的相关“快速入门”指南:
openjdk:<version>-slim
此镜像安装了OpenJDK的-headless
包,因此缺少默认标签中包含的许多与UI相关的Java库和一些常见软件包。它只包含运行Java所需的最小软件包。除非您在仅部署openjdk
映像并且有空间限制的
#simple dockerFile for java app:
#here we are using Base Alpine Linux based image with OpenJDK JRE only
#For Java 8, try this
FROM openjdk:8-jre-alpine
#For Java 11, try this
#FROM adoptopenjdk/openjdk11:alpine-jre
#copy application WAR/JAR (with libraries inside)
COPY target/spring-boot-*.war/jar yourName.war/jar
# specify default command
CMD ["/usr/bin/java", "-jar", "/yourName.war/jar"]
你还可以使用docker history yourImageName
查看构建镜像所使用的所有层(以及它们的大小)。
FROM
行也是有益的。Alpine镜像比基于Debian的镜像要小得多,但在各种方面也可能遇到兼容性问题。 - David Maze