OpenJDK Java 17 docker 镜像

Dav*_*ary 92 java docker java-17

我们正在升级 docker 中的微服务以使用 Java 17,之前我们使用基础镜像 openjdk:11-jre-slim。Java 17对应的镜像是什么?

好像没有openjdk:17-jre-slim?事实上,似乎没有任何最新的 jre 映像 - 只有 jdks。11-jre-slim 映像似乎约为 75MB - 是否有合适的类似大小的 Java 17 映像?

我们过去也使用过高山图像。

San*_*anu 65

Oracle 镜像可从 Java-17 免费获得openjdk:17-oracle

Dockerfile:

FROM openjdk:17-oracle
Run Code Online (Sandbox Code Playgroud)

openjdk:17-jdk-slim还创建轻量级图像

Dockerfile:

FROM openjdk:17-jdk-slim
Run Code Online (Sandbox Code Playgroud)

  • 这没有许可问题吗?我想现在大多数人都想避开 Oracle (5认同)
  • @Novaterata 从 Java 17 开始,您可以自由使用它,甚至用于商业目的 (5认同)
  • 17-oracle 与 17.0.1-jdk-oraclelinux8、jdk-oraclelinux8、17.0.1-jdk-oracle、17-jdk-oracle、17-oracle、jdk-oracle 等标签相同。基本上是相同的 JDK图像,而不是 JRE。https://github.com/docker-library/docs/blob/master/openjdk/README.md#simple-tags (4认同)
  • 正如 @DeekshithAnand 完美提到的,从 Java 17 开始,oracle 镜像可以自由使用。如果您正在寻找不同的图像,那么“openjdk:17-jdk-slim”也可以很好地创建轻量级图像 (3认同)
  • 2023 更新:这个答案现在已经过时了,因为 openjdk 镜像已被弃用。请参阅 [Paul Verest 的回答](/sf/answers/5319805431/) 了解替代方案。 (3认同)

Pau*_*est 32

(截至 2023 年)不要使用任何openjdk:17-映像,因为您可能得到的是旧的早期 jdk 17 版本,存在安全问题!在https://hub.docker.com/_/openjdk
上有明确的说明

弃用通知

openJDK 17 不再构建!
(并且不在https://github.com/docker-library/openjdk中维护)


虽然以前使用任何 Linux 风格都比较简单,但现在您需要做出选择,因为不同的openJDK 构建docker 镜像将使用不同的 Linux 风格。

例如 amazoncorreto - Amazon Linux、
Oracle JDK - Oracle Linux 等


不同的来源可能会有不同的推荐

例如在https://docs.docker.com/language/java/build-images/上使用eclipse-temurin

来自 eclipse-temurin:17-jdk-jammy


小智 16

如果您正在寻找带有 Alpine Linux 和 OpenJDK 的最小 Docker 镜像,请查看 DockerHub 上的 Liberica JDK 容器https://hub.docker.com/r/bellsoft/liberica-openjdk-alpine 镜像有 Alpine 和 Liberica Lite ,其大小经过优化,可用于微服务。Spring团队也推荐https://spring.io/quickstart


Int*_*ive 8

添加到 @PaulVerest 的出色答案,为了像我这样的其他新手的利益,我在这里发布了Dockerfile对我有用的答案(截至 2023 年 5 月,从Windows 10PC 构建和运行):

\n
FROM amazoncorretto:17.0.7-alpine\n\n# Add app user\nARG APPLICATION_USER=appuser\nRUN adduser --no-create-home -u 1000 -D $APPLICATION_USER\n\n# Configure working directory\nRUN mkdir /app && \\\n    chown -R $APPLICATION_USER /app\n\nUSER 1000\n\nCOPY --chown=1000:1000 ./myapp-0.0.1-SNAPSHOT.jar /app/app.jar\nWORKDIR /app\n\nEXPOSE 8080\nENTRYPOINT [ "java", "-jar", "/app/app.jar" ]\n
Run Code Online (Sandbox Code Playgroud)\n

如果您使用以下方式构建容器:

\n
docker build -t docker_myapp .\n
Run Code Online (Sandbox Code Playgroud)\n

然后,使用以下命令从命令行运行它:

\n
docker run -p 8080:8080 docker_myapp\n
Run Code Online (Sandbox Code Playgroud)\n

注意:您无法使用同一命令行来停止它Ctrl+C。要停止它,您需要打开另一个命令行并执行以下操作:

\n
docker ps\nCONTAINER ID   IMAGE                    COMMAND                  CREATED       STATUS       PORTS                    NAMES\n16dad8047672   docker_myapp   "java -jar /app/app.\xe2\x80\xa6"   7 hours ago   Up 7 hours   0.0.0.0:8080->8080/tcp   sharp_rode\n
Run Code Online (Sandbox Code Playgroud)\n

然后:

\n
docker stop 16dad8047672   \n
Run Code Online (Sandbox Code Playgroud)\n