这是一个基于 IBM Semeru OpenJ9 的轻量级 Docker 镜像项目,使用多阶段构建技术创建了一个优化的 Java 运行环境。
- 🚀 轻量级: 使用
jlink工具创建只包含必要模块的自定义 JRE - 🔧 多阶段构建: 分离构建环境和运行环境,减小最终镜像大小
- 🛡️ 安全: 包含
su-exec工具用于安全的用户切换 - 🌍 国际化: 支持中文语言环境设置
- ⚡ 高性能: 基于 OpenJ9 JVM,提供优秀的性能表现
- 基础镜像:
ibm-semeru-runtimes:open-25-jdk - 运行时基础:
ubuntu:noble - Java 版本: OpenJDK 25
- JVM: OpenJ9
该镜像使用 jlink 工具创建了一个包含以下模块的自定义 JRE:
java.base- 核心 Java 类库java.desktop- 桌面应用支持java.logging- 日志框架java.naming- JNDI 命名服务java.net.http- HTTP 客户端java.sql- 数据库连接java.sql.rowset- 数据库行集java.xml- XML 处理jdk.httpserver- HTTP 服务器jdk.naming.dns- DNS 命名服务jdk.unsupported- 不支持的 API
JAVA_HOME:/opt/java/openjdkPATH: 包含 Java 二进制文件路径LANG:en_US.UTF-8LANGUAGE:en_US:enLC_ALL:en_US.UTF-8PUID:0(用户 ID)PGID:0(组 ID)UMASK:022TZ:Asia/Shanghai
docker build -t openj9-docker .docker run -it openj9-docker java -versiondocker run -v /path/to/your/app:/app openj9-docker java -jar /app/your-app.jardocker run -it openj9-docker bashdocker run --rm openj9-docker java -versionecho 'public class Hello { public static void main(String[] args) { System.out.println("Hello OpenJ9!"); } }' > Hello.java
docker run -v $(pwd):/app openj9-docker javac /app/Hello.java
docker run -v $(pwd):/app openj9-docker java -cp /app Helloopenj9-docker/
├── Dockerfile # Docker 构建文件
└── README.md # 项目说明文档
-
第一阶段 (jre-builder):
- 基于
ibm-semeru-runtimes:open-25-jdk - 安装和编译
su-exec工具 - 使用
jlink创建自定义 JRE
- 基于
-
第二阶段 (运行时):
- 基于
ubuntu:noble - 复制自定义 JRE 和必要工具
- 设置环境变量和语言环境
- 基于
- 使用
jlink的--strip-debug选项移除调试信息 - 使用
--no-header-files和--no-man-pages移除文档 - 使用
--compress=2进行压缩 - 清理构建依赖以减小镜像大小
本项目遵循相应的开源许可证。请查看 IBM Semeru 和 Ubuntu 的许可证条款。
欢迎提交 Issue 和 Pull Request 来改进这个项目。