# 优化后的 Dockerfile - shop-recycle-gateway # ============================================================ # 使用轻量级基础镜像:eclipse-temurin:17-jre-alpine # 相比 openjdk:17.0.2-jdk-slim 减少约 400MB # 只包含 JRE 不包含 JDK(生产环境只需要运行时) # ============================================================ FROM eclipse-temurin:17-jre-alpine # 设置工作目录 WORKDIR /app # 将 JAR 文件复制到容器 COPY shop-recycle-gateway-1.0.0.jar /app/ # 暴露应用端口 EXPOSE 1211 # ============================================================ # 优化后的 JAVA_OPTS: # 必须保留的参数: # -Djava.awt.headless=true : 禁用 GUI,适合服务器环境 # -Djava.net.preferIPv4Stack=true: 解决 IPv4/IPv6 兼容性问题 # -Xss256k : 线程栈大小,防止线程创建失败 # -XX:+DisableExplicitGC : 禁用显式 GC,避免应用代码影响 # # 在 K8S 环境中删除的参数及原因: # -server : K8S 中已是服务模式,无需指定 # -Xmx512m -Xms512m -Xmn256m : 由 K8S resources.limits/requests 管理,不用 JVM 参数指定 # -XX:PermSize/MaxPermSize : Java 8+ 已过时(PermGen → Metaspace) # -XX:+UseConcMarkSweepGC : Java 17 已默认使用 G1GC,该参数不生效 # -XX:CMSxxx : CMS GC 相关参数,Java 17 中不适用 # -XX:LargePageSizeInBytes : K8S 环境不推荐,由 K8S 调度器管理 # -XX:+UseFastAccessorMethods : 现代 JVM 已默认优化,显式指定无实际效果 # ============================================================ ENV JAVA_OPTS="-Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Xss256k -XX:+DisableExplicitGC" # 健康检查(可选,建议在 Kubernetes 中配置 livenessProbe) HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD java -cp /app/shop-recycle-gateway-1.0.0.jar -version &> /dev/null || exit 1 # 启动应用 # 自动读取 /app/conf 目录下的所有 YAML/Properties 配置文件 CMD ["sh", "-c", "java ${JAVA_OPTS} -jar /app/shop-recycle-gateway-1.0.0.jar --spring.config.location=file:/app/conf/"]