Tomcat Docker 官方镜像 JDK 与 JRE 变体揭秘:同一 Tomcat 为何体积能省一半?

📅 2026/8/24 9:16:28
Tomcat Docker 官方镜像 JDK 与 JRE 变体揭秘:同一 Tomcat 为何体积能省一半?
Tomcat Docker 官方镜像 JDK 与 JRE 变体揭秘同一 Tomcat 为何体积能省一半【免费下载链接】tomcatDocker Official Image packaging for Apache Tomcat项目地址: https://gitcode.com/gh_mirrors/to/tomcatTomcat Docker 官方镜像仓库Docker Official Image for Apache Tomcat为 9.0、10.1、11.0 三个大版本各提供了一套JDK / JRE × 多个 Java 版本 × Temurin 基础系统的镜像组合。同一份 Tomcat为什么 JRE 变体比 JDK 变体小了近一半本文带你读透仓库里的构建脚本搞懂这些变体是怎么生成、怎么选、怎么更新的。️ 先看家底Tomcat Docker 官方镜像有哪些变体所有变体清单都记录在仓库根目录的versions.json中当前收录 Tomcat 9.0.121 / 10.1.59 / 11.0.25Tomcat 大版本支持的 Java 版本每个变体的 Java 形态11.0latest17 / 21 / 25jdk、jre10.111 / 17 / 21 / 25jdk、jre9.08 / 11 / 17 / 21 / 25jdk、jre每个 Java 版本又对应两种 Temurin 基础系统temurin-nobleUbuntu 24.04和temurin-jammyUbuntu 22.04例如目录结构就是11.0/jre17/temurin-noble/Dockerfile这样的层级。 为什么 Tomcat 11 没有 JDK 8规则写在shared.jq的is_supported_java_version里Tomcat 11 要求 Java 17、10.1 要求 Java 11、9.0 支持 Java 8不满足的变体会在生成时被自动过滤掉。 核心揭秘JRE 变体凭什么省一半答案藏在Dockerfile.template中——JDK 和 JRE 走了两条完全不同的构建路径1️⃣ JDK 变体全量构建重活都在这一步干完JDK 变体的 Dockerfile 会完成一整套从源码到成品的工作从 Apache 官方镜像下载 Tomcat 发行包并做SHA512 校验 GPG 签名验签移除默认 webapps编译Tomcat NativeAPR 加速库用apt-mark 自动清理机制删掉所有构建依赖gcc、make 等避免构建工具残留撑大镜像最后跑catalina.sh version冒烟测试。2️⃣ JRE 变体零构建直接搬家JRE 变体的构建核心只有两行思路见11.0/jre17/temurin-noble/DockerfileCOPY --fromtomcat:11.0.25-jdk17-temurin-noble直接把同名 JDK 变体里已构建好的 Tomcat 整个复制过来基础镜像换成更小的eclipse-temurin:17-jre-noble再按.dependencies.txt补装 Tomcat Native 运行时所需的最小依赖库同样执行catalina.sh configtest验证 Native 库加载成功。体积能省一半的秘密就在这JDK 镜像里包含编译器javac、完整开发工具链而 JRE 镜像只有运行期需要的类库。JRE 变体把构建完全复用给了 JDK 变体自己只负责换底座 搬成品于是同一份 Tomcat 文件JRE 镜像整体小了一圈拉取也更快。️ 实战指南如何选对 Tomcat Docker 镜像标签镜像标签由generate-stackbrew-library.sh自动生成常见标签规律如下tomcat:11-jre17-temurin-noble→ Tomcat 11 Java 17 JRE Ubuntu 24.04 底座tomcat:11/tomcat:latest→ 默认变体当前最新 temurin-noble 组合省略厂商名时默认指向 Temurin 变体如tomcat:9-jdk8即jdk8/temurin-noble。选型建议清单✅场景推荐选择理由生产部署jre 长期支持 Java 版本如 17/21体积更小、攻击面更小需要运行时编译 JSPjdk变体Jasper 编译 JSP 依赖 javac需要最新 Servlet 6.1 规范Tomcat 1111-jre21-...11 只支持 Java 17兼容老旧项目9-jre89.0 是仍支持 Java 8 的版本线️ 自动化更新镜像是怎么保鲜的整个更新流程由update.sh一键串联分两步versions.sh从 Apache 官方下载页抓取各大版本的最新稳定版自动跳过 -M 里程碑版本及其 SHA512再结合from.jq把变体名如jre17/temurin-noble映射为eclipse-temurin:17-jre-noble基础镜像确认该基础镜像在官方镜像库中真实存在后写回versions.jsonapply-templates.sh读取versions.json用Dockerfile.templatefrom.jqshared.jq为每个版本 × 变体组合生成独立的Dockerfile所以每个生成文件顶部都写着请勿直接编辑。也就是说你看到的每一个子目录 Dockerfile 都是模板产物改模板Dockerfile.template才是正解。 一句话总结Tomcat Docker 官方镜像的瘦身不是删了什么而是构建与运行分离JDK 变体承担全部构建工作JRE 变体直接复用其成果并换上更轻的 JRE 底座——生产环境优先选 JRE 变体需要运行时编译能力时再切回 JDK 变体即可。【免费下载链接】tomcatDocker Official Image packaging for Apache Tomcat项目地址: https://gitcode.com/gh_mirrors/to/tomcat创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考