news 2026/8/24 9:16:21

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tomcat Docker 官方镜像 JDK 与 JRE 变体揭秘:同一 Tomcat 为何体积能省一半?

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

【免费下载链接】tomcatDocker Official Image packaging for Apache Tomcat项目地址: https://gitcode.com/gh_mirrors/to/tomcat

Tomcat 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.25):

Tomcat 大版本支持的 Java 版本每个变体的 Java 形态
11.0(latest)17 / 21 / 25jdk、jre
10.111 / 17 / 21 / 25jdk、jre
9.08 / 11 / 17 / 21 / 25jdk、jre

每个 Java 版本又对应两种 Temurin 基础系统:temurin-noble(Ubuntu 24.04)和temurin-jammy(Ubuntu 22.04),例如目录结构就是11.0/jre17/temurin-noble/Dockerfile这样的层级。

💡 为什么 Tomcat 11 没有 JDK 8?规则写在shared.jqis_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 Native(APR 加速库);
  • apt-mark+ 自动清理机制删掉所有构建依赖(gcc、make 等),避免"构建工具残留"撑大镜像;
  • 最后跑catalina.sh version冒烟测试。

2️⃣ JRE 变体:零构建,直接"搬家"

JRE 变体的构建核心只有两行思路(见11.0/jre17/temurin-noble/Dockerfile):

  • COPY --from=tomcat: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-jdk8jdk8/temurin-noble

选型建议清单✅:

场景推荐选择理由
生产部署jre+ 长期支持 Java 版本(如 17/21)体积更小、攻击面更小
需要运行时编译 JSPjdk变体Jasper 编译 JSP 依赖 javac
需要最新 Servlet 6.1 规范Tomcat 11(11-jre21-...11 只支持 Java 17+
兼容老旧项目9-jre89.0 是仍支持 Java 8 的版本线

🛠️ 自动化更新:镜像是怎么保鲜的?

整个更新流程由update.sh一键串联,分两步:

  1. versions.sh:从 Apache 官方下载页抓取各大版本的最新稳定版(自动跳过 -M 里程碑版本)及其 SHA512,再结合from.jq把变体名(如jre17/temurin-noble)映射为eclipse-temurin:17-jre-noble基础镜像,确认该基础镜像在官方镜像库中真实存在后,写回versions.json
  2. apply-templates.sh:读取versions.json,用Dockerfile.template+from.jq+shared.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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 9:09:52

数学建模竞赛获奖名单解读:从能力培养到职业发展的核心价值

1. 从一份获奖名单说起:数学建模竞赛的价值与启示最近,一份“2020年东三省数学建模联赛(辽宁赛区)获奖名单”在网络上流传,引起了我的注意。这份名单本身,可能只是几页PDF文档,上面罗列着学校、…

作者头像 李华
网站建设 2026/8/24 9:05:51

时间序列分析实战:从ARIMA建模到数学建模竞赛应用

1. 项目概述:时间序列分析在数学建模中的核心地位如果你参加过数学建模竞赛,或者处理过任何带有时间戳的数据,比如股票价格、月度销售额、气温变化,那你一定绕不开“时间序列分析”这个工具。它不是什么高深莫测的黑魔法&#xff…

作者头像 李华
网站建设 2026/8/24 9:05:04

如何15分钟搭建微信公众号RSS订阅服务:wewe-rss完整部署指南

如何15分钟搭建微信公众号RSS订阅服务:wewe-rss完整部署指南 【免费下载链接】wewe-rss 🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书) 项目地址: https://gitcode.com/GitHub_Tre…

作者头像 李华
网站建设 2026/8/24 9:04:41

层次分析法(AHP)详解:从多准则决策到量化权重的完整指南

1. 项目概述:从“拍脑袋”到“算明白”的决策利器刚接触数学建模或者需要做方案决策时,很多人都会陷入一种困境:面对多个备选方案,每个方案下又有一堆评价指标,比如选学校要看师资、环境、就业、费用;选手机…

作者头像 李华