最稳妥方式是直接使用官方jdk镜像,如openjdk或eclipse-temurin,避免从ubuntu/centos等基础镜像手动安装;官方镜像已预装jdk、配置环境变量、精简体积并定期更新安全补丁。
直接用官方 jdk 镜像最稳妥,不折腾环境变量,也不踩手动安装的坑。
优先选用 openjdk 或 Temurin 官方镜像
别从 ubuntu、centos 或 scratch 这类通用基础镜像开始装 JDK。官方镜像已预装 JDK、配置好环境变量、精简过体积,还定期更新安全补丁。
- 开发调试常用:
openjdk:17-jdk-slim(Debian 系)、openjdk:17-jdk-alpine(更小,但注意 glibc 兼容性) - 生产推荐:
eclipse-temurin:17-jre-jammy(Ubuntu LTS 基础,稳定且支持容器感知 JVM 参数) - 验证是否生效:启动容器后执行
java -version和echo $JAVA_HOME,应能正常输出
自定义构建时,Dockerfile 要简洁明确
如果必须自己构建(比如要加特定工具链或私有 CA),也应基于官方 JDK 镜像延伸,而非从零安装。
- 写法示例:
FROM eclipse-temurin:17-jre-jammyCOPY myapp.jar /app/WORKDIR /appENTRYPOINT ["java", "-Xms256m", "-Xmx512m", "-jar", "myapp.jar"]- 避免在 Dockerfile 中写
apt install openjdk-17-jdk或手动解压 tar.gz —— 这会增大镜像、延长构建时间、引入不可控依赖
JVM 参数需适配容器资源限制
旧版 JDK(如 8u131 之前)默认不识别容器内存限制,容易 OOM。Java 8u191+、Java 10+ 默认启用 +UseContainerSupport,但需确保:
- 运行容器时通过
-m 1g明确设置内存上限 - JVM 启动参数中不要硬写
-Xmx2g这类远超容器限制的值 - 推荐用相对方式:如
-XX:MaxRAMPercentage=75.0,让 JVM 自动按容器内存比例分配堆
本地开发联调的小技巧
在宿主机写代码、容器里跑服务,需要高效同步和调试。
- 用
-v $(pwd)/src:/workspace/src挂载源码目录,配合编译工具(如 Gradle)实现热重载 - 暴露调试端口:
-p 5005:5005,并在 JVM 参数中加-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 - 避免把
/etc/profile或.bashrc改来改去 —— 容器是临时的,环境变量应在镜像层或运行时通过-e JAVA_HOME=...注入
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











