镜像准备镜像拉取命令展开代码语言:BashAI代码解释dockerpullxxx.xuanyuan.run/library/eclipse-temurin:{TAG}其中{TAG}为镜像版本标签,推荐使用官方维护的稳定版本 本文以推荐标签latest为例,执行以下命令拉取最新版镜像:展开代码语言:BashAI代码解释dockerpullxxx.xuanyuan.run/library/eclipse-temurin:latest 可通过轩辕镜像标签列表https://xuanyuan.cloud/r/library/eclipse-temurin/tags查看所有可用标签,选择时需考虑:生产环境建议使用具体版本标签(如21.0.2 定期更新镜像:关注轩辕镜像文档https://xuanyuan.cloud/r/library/eclipse-temurin获取安全更新,及时升级以修复漏洞。 镜像拉取:eclipse-temurin采用dockerpullxxx.xuanyuan.run/library/eclipse-temurin:{TAG}格式,推荐使用具体版本标签确保稳定性。
以下是基于不同场景的配置示例: 案例1:Spring Boot JAR应用 # 使用官方OpenJDK镜像作为基础 FROM eclipse-temurin:17-jdk-jammy # 设置工作目录 app.jar # 暴露应用端口(根据实际修改) EXPOSE 8080 # 启动命令 ENTRYPOINT ["java", "-jar", "app.jar"] 案例2:传统Java SE应用 FROM eclipse-temurin run -p 8080:8080 -d java-image-name -p:端口映射(主机端口:容器端口) -d:后台运行 优化建议 多阶段构建 减少最终镜像大小,丢弃构建阶段的依赖: FROM eclipse-temurin /gradlew build FROM eclipse-temurin:17-jre WORKDIR /app COPY --from=builder /app/build/libs/app.jar
以下步骤以使用最广泛的eclipse-temurin为例,其他替代镜像的操作逻辑一致。 :21-jre-ubuntu-jammydockerpulldocker.xuanyuan.run/eclipse-temurin:21-jre-ubuntu-jammy开发编译(Alpine轻量)eclipse-temurin :17-jdk-alpine3.22dockerpulldocker.xuanyuan.run/eclipse-temurin:17-jdk-alpine3.22最新LTS版(默认Ubuntu)eclipse-temurin :latestdockerpulldocker.xuanyuan.run/eclipse-temurin:latest开发编译(Ubuntu)eclipse-temurin:11-jdk-ubuntu-jammydockerpulldocker.xuanyuan.run /eclipse-temurin:11-jdk-ubuntu-jammy轻量运行JAR包(Alpine)eclipse-temurin:21-jre-alpine3.22dockerpulldocker.xuanyuan.run
为了给你一个基础镜像大小的概念,以下是openjdk:17-jdk-slim(瘦身版)和eclipse-temurin:17-jdk-alpine镜像大小的比较:已知应用程序(jar)的大小约为20MB 使用 eclipse-temurin:17-jdk-alpine 作为基础镜像。 AS jre-builder3 |4 | # Install binutils, required by jlinkERROR: failed to solve: eclipse-temurin:17 :17-jdk-alpine 作为基础镜像构建完镜像后,我们得到了这个结果:看看两个镜像的大小,使用 eclipse-temurin:17-jdk-alpine 作为基础镜像的镜像大小为180MB,比使用 在第一阶段,我们使用 eclipse-temurin:17-jdk-alpine 镜像来使用 jlink 构建自定义JRE镜像。
0.0s => ERROR [internal] load metadata for docker.io/library/eclipse-temurin 1.6s =>[auth] library/eclipse-temurin 0.0s ------ >[internal] load metadata for docker.io/library/eclipse-temurin :24-jre: ------ Dockerfile:1 -------------------- |>>> FROM eclipse-temurin:24-jre |ADD container-java.jar 最后,我用Scala写了个程序打包成container,部署成功之后,运行效果如下: 用的Dockerfile也贴下供参考(偷懒,直接把Scala项目的onejar拿过来打包的): FROM eclipse-temurin
Container Images FROM eclipse-temurin:17-jre as builder WORKDIR application ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract FROM eclipse-temurin
SpringBootGracefulShutdownExample-0.0.1-SNAPSHOT.jar Dockerfie.bad: 使用 bash 启动脚本, 这会导致终止信号无法传递 FROM eclipse-temurin 也有很多方法; 比如常见的直接使用 CMD 或 ENTRYPOINT 指令运行 java 程序: Dockerfile.direct: 直接运行 java 程序, 能够正常接受到终止信号 FROM eclipse-temurin Dockerfile.bash-c: 采用 bash -c 执行, 在命令简单情况下可以做到优雅关闭 FROM eclipse-temurin:11-jdk COPY entrypoint.bad.sh 比如下面的例子: Dockerfile.tini: 加了 tini 也无法优雅关闭的情况 FROM eclipse-temurin:11-jdk RUN set -e \ && apt update 引用链接 [1] eclipse-temurin: https://hub.docker.com/_/eclipse-temurin [2] ibm-semeru-runtimes: https://hub.docker.com
SpringBootGracefulShutdownExample-0.0.1-SNAPSHOT.jar Dockerfie.bad: 使用 bash 启动脚本, 这会导致终止信号无法传递 FROM eclipse-temurin 也有很多方法; 比如常见的直接使用 CMD 或 ENTRYPOINT 指令运行 java 程序: Dockerfile.direct: 直接运行 java 程序, 能够正常接受到终止信号 FROM eclipse-temurin Dockerfile.bash-c: 采用 bash -c 执行, 在命令简单情况下可以做到优雅关闭 FROM eclipse-temurin:11-jdk COPY entrypoint.bad.sh 比如下面的例子: Dockerfile.tini: 加了 tini 也无法优雅关闭的情况 FROM eclipse-temurin:11-jdk RUN set -e \ && apt update 引用链接 [1]eclipse-temurin: https://hub.docker.com/_/eclipse-temurin [2]ibm-semeru-runtimes: https://hub.docker.com
/src RUN mvn package -DskipTests # 第二阶段:运行时环境 FROM eclipse-temurin:17-jre-alpine WORKDIR /app COPY - RUN mvn -pl module1,module2 clean package -DskipTests # 服务1镜像 FROM eclipse-temurin:17-jre-alpine WORKDIR from=builder /app/module1/target/*.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"] # 服务2镜像 FROM eclipse-temurin
/src RUN mvn clean package -DskipTests # 第二阶段:运行阶段 FROM eclipse-temurin:17-jre-jammy RUN groupadd -r FROM eclipse-temurin:17-jre-jammy # 使用非root用户运行 RUN groupadd -r spring && useradd -r -g spring spring FROM eclipse-temurin:17-jre-jammy ARG JAR_FILE=target/*.jar ARG PROFILE=dev COPY ${JAR_FILE} app.jar /src RUN mvn package -DskipTests # 运行阶段 FROM eclipse-temurin:17-jre-alpine COPY --from=builder /app/ 在选择基础镜像时,建议优先考虑: 官方维护的轻量级镜像(如eclipse-temurin:17-jre-alpine) 定期更新的安全补丁版本 经过安全扫描认证的镜像源 支持eBPF安全监控的运行时镜像
我现在用的都是eclipse-temurin这个Java基础镜像, 这也是Docker官方提供的. 使用统一的定制基础镜像 有时候你可能需要在基础镜像基础之上,添加一些定制的能力或功能. FROM my-company/base-java:17.0.3 比如,构建了一个基于eclipse-temurin的自己的定制基础镜像. FROM eclipse-temurin:17.0.6_10-jre RUN useradd -ms /bin/bash lingen USER lingen 定义一个用户是非常简单的, 如上代码所示.
FROM eclipse-temurin:17 as build ARG MAVEN_VERSION=3.8.5 ARG BASE_URL=https://downloads.apache.org/maven RUN mvn clean package COPY target/*.jar app.jar FROM eclipse-temurin:17-jre-alpine as production COPY
FROM eclipse-temurin:17 as build ARG MAVEN_VERSION=3.8.5 ARG BASE_URL=https://downloads.apache.org/maven RUN mvn clean package COPY target/*.jar app.jar FROM eclipse-temurin:17-jre-alpine as production COPY
Dockerfile配置# 基础镜像FROM eclipse-temurin:17-jdk-alpine# 设置工作目录WORKDIR /app# 复制依赖文件COPY mvnw .COPY .mvn -DskipTestsRUN mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)# 创建运行时镜像FROM eclipse-temurin
容器化部署Dockerfile构建标准镜像:FROM eclipse-temurin:17-jreCOPY target/app.jar /app.jarENTRYPOINT ["java","-jar
springBootDockerized-0.0.1-SNAPSHOT.jar"] 但非常重要的是,我们不需要 JDK,我们只需要 JRE java 运行时环境 我建议在OpenJDK官方链接中使用 JRE 层,您可以找到以下内容: eclipse-temurin 0.0.1-SNAPSHOT.jar #ENTRYPOINT ["java" , "-jar" , "/springBootDockerized-0.0.1-SNAPSHOT.jar"] FROM eclipse-temurin /target/*.jar app.jar RUN java -Djarmode=layertools -jar app.jar extract FROM eclipse-temurin:17.0.5
* 1024 * 1024]); Thread.sleep(150); } }}Dockerfile(多阶段构建,尽量精简镜像体积):# buildFROM eclipse-temurin :17-jdk-jammy AS buildWORKDIR /srcCOPY MemoryEater.java .RUN javac MemoryEater.java# runFROM eclipse-temurin
Dockerfile 实现: # 使用官方 OpenJDK 镜像 FROM eclipse-temurin:17-jdk-jammy as builder WORKDIR /workspace/app
Dockerfile 文件 内容如下: # syntax=docker/dockerfile:1 # https://docs.docker.com/language/java/build-images/ FROM eclipse-temurin
docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds#FROM alpine:3.13FROM eclipse-temurin jwgl.jarCMD ["java", "-jar", "/jwgl.jar"]这是我根据 cloudbase 文档中的样例进行修改的,除了基本的项目配置,我将基础镜像由 alpine:3.13 修改成了 eclipse-temurin