Dockerfile.optimized 2.2 KB

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