DockerFile实战_eclipse-temurin
背景
在上一篇文章中,我们对DockerFile有了一个较为深刻的认识,那么这篇文章,我将会向你展示如何自定义一个镜像并且在docker上运行。
一、基础指令
- 推荐使用官方镜像的LTS版本
FROM eclipse-temurin:17-jre-jammy
FROM ubuntu:latest
ENV A=1 B=2
- 会被后续RUN/CMD等指令继承
ENV JAVA_OPTS=\"-Xms512m -Xmx1024m\"
ENV PATH=$PATH:/tmp
COPY *.jar /app/
- 会保留文件元数据
COPY --chown=1000:1000 . /app
COPY /opt/xxx /app
&&
连接- 用
\\
换行提高可读性RUN apt update && apt install -y \\
curl && rm -rf /var/lib/apt/lists/*
RUN cd /app && tar xf pkg.tar
- 需与
docker run -p
配合EXPOSE 8080/tcp 8443/udp
EXPOSE 8080-8090
- 建议用JSON数组格式
ENTRYPOINT [\"java\", \"-jar\", \"app.jar\"]
ENTRYPOINT java -jar app.jar
#1、准备Linux运行环境(推荐使用轻量级基础镜像)FROM eclipse-temurin:17-jre-alpine#2、安装JRE并配置环境变量(基础镜像已包含,此处为扩展配置)ENV JAVA_OPTS=\"-Xms512m -Xmx1024m\"ENV TZ=Asia/Shanghai#3、拷贝Jar包(使用分层构建优化)COPY target/*.jar /app/application.jar#4、编写运行脚本(使用ENTRYPOINT+CMD组合)ENTRYPOINT [\"sh\", \"-c\", \"java ${JAVA_OPTS} -jar /app/application.jar\"]EXPOSE 8888
二、分步骤技术解析
① 基础镜像选择
-
推荐方案:
FROM eclipse-temurin:17-jre-alpine
- 比
openjdk
镜像更小(Alpine版约85MB) - 已包含完整的JRE环境
- 比
-
替代方案:
FROM amazoncorretto:17 # 亚马逊优化版
② 环境配置增强
# 内存配置(根据应用需求调整)ENV JAVA_OPTS=\"-Xms512m -Xmx1024m -XX:+UseG1GC\"# 时区设置RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
③ 应用部署优化
- 分层构建技巧:
COPY --chown=1000:1000 target/*.jar /app/ # 指定非root用户
- 版本控制:
ARG JAR_FILE=target/*.jarCOPY ${JAR_FILE} /app/application.jar
④ 启动脚本进阶
# 健康检查(K8s就绪探针)HEALTHCHECK --interval=30s --timeout=3s \\ CMD curl -f http://localhost:8888/actuator/health || exit 1# 允许传递启动参数CMD [\"--spring.profiles.active=prod\"]
三、构建与运行命令
-
构建镜像:
docker build -t java-app:v1 .
-
运行容器:
docker run -d -p 8860:8888 \\ -e JAVA_OPTS=\"-Xmx2048m\" \\ java-app:v1
容器创建成功:
四、生产环境建议
-
安全加固:
USER 1000 # 使用非root用户RUN addgroup -S appgroup && adduser -S appuser -G appgroup
-
多阶段构建(如需包含JDK编译):
FROM eclipse-temurin:17-jdk as builderWORKDIR /buildCOPY . .RUN ./gradlew bootJarFROM eclipse-temurin:17-jre-alpineCOPY --from=builder /build/build/libs/*.jar /app.jar
-
镜像扫描:
docker scan java-app:v1
五、常见问题排查
docker logs
查看JVM错误-Xmx
参数并检查内存泄漏TZ
环境变量已正确设置-XX:+UseContainerSupport