news 2026/8/24 9:33:30

Tomcat Docker 官方镜像新手指南:5 分钟跑通你的第一个 Tomcat 容器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Tomcat Docker 官方镜像新手指南:5 分钟跑通你的第一个 Tomcat 容器

Tomcat Docker 官方镜像新手指南:5 分钟跑通你的第一个 Tomcat 容器

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

Apache Tomcat 是最流行的 Java Web 服务器之一,而Tomcat Docker 官方镜像就是 Docker 上运行 Tomcat 的标准方式,由 Docker 社区团队维护。本项目(gh_mirrors/to/tomcat)正是这份官方镜像的打包源码仓库,覆盖 Tomcat9.0、10.1、11.0三大版本系列,并搭配 Java 8 到 Java 25 的多种 Java 版本。这篇新手指南将带你用 5 分钟、一行docker run命令跑通你的第一个 Tomcat 容器,并部署第一个 Web 应用,全程无需安装任何 Java 环境。

一、为什么选择 Tomcat Docker 官方镜像?🚀

对新手来说,直接用官方镜像有四大好处:

  • 开箱即用:镜像内置 Java 运行时、Tomcat 以及编译好的 Tomcat Native 加速库,不用手动配置任何环境
  • 版本自由:3 个大版本 × 多个 Java 版本任意组合,清单见 versions.json
  • 安全可信:构建时会对 Tomcat 安装包做 SHA512 校验 + GPG 签名验证,确保来源可靠
  • 标准化运维:默认以非 root 用户运行、已移除自带的示例应用,镜像干净利落

二、镜像版本怎么选:Tomcat 9、10 还是 11?

版本信息定义在 versions.json 中,目前仓库维护的版本如下:

Tomcat 系列当前版本支持的 Java 版本适合谁
9.09.0.1218 / 11 / 17 / 21 / 25使用javax.servlet的存量项目
10.110.1.5911 / 17 / 21 / 25新项目的主流之选jakarta.servlet
11.011.0.2517 / 21 / 25面向未来的长期支持系列

每个系列下还有两类子变体,理解镜像标签(tag)命名就简单了:

  • jdkvsjrejdk带完整 JDK,可在线编译 JSP;jre只含运行时,镜像更小,适合部署预先编译好的应用
  • temurin-jammyvstemurin-noble:基于 Ubuntu 22.04 或 24.04 的 Eclipse Temurin(Adoptium)Java

组合示例:tomcat:10.1-jdk21表示 Tomcat 10.1 系列 + Java 21 JDK。

三、5 分钟快速启动:运行你的第一个 Tomcat 容器 ⏱️

只需提前装好 Docker,然后三步走:

# 1. 拉取镜像(约 500MB,视网速等待几分钟) docker pull tomcat:10.1-jdk21 # 2. 启动容器,把容器的 8080 端口映射到本机 8080 docker run --name tomcat-test -p 8080:8080 -d tomcat:10.1-jdk21 # 3. 查看日志,确认 Tomcat 启动成功 docker logs tomcat-test

看到Server startup in [xxx] milliseconds字样,说明你的第一个 Tomcat 容器已经跑起来了!🎉

💡 小提示:镜像默认把工作目录设为/usr/local/tomcat(即CATALINA_HOME),并默认执行catalina.sh run启动,这些约定在 Dockerfile.template 中定义。

四、部署第一个 Web 应用:挂载 webapps 目录

官方镜像出于安全考虑,把自带示例应用移到了webapps.dist目录,容器内webapps默认为空。所以访问http://localhost:8080会 404——别慌,这正是让你部署自己的应用:

# 准备本地目录,放入你的 WAR 包或展开后的 Web 目录 mkdir -p ./myapp && cp myapp.war ./myapp/ # 挂载到容器的 webapps,Tomcat 会自动部署 docker run --name tomcat-app \ -p 8080:8080 \ -v $(pwd)/myapp:/usr/local/tomcat/webapps/myapp \ -d tomcat:10.1-jdk21

随后访问http://localhost:8080/myapp,看到你的应用页面,恭喜通关!🏁

五、镜像是怎么构建的?(进阶选读)🔍

如果你想了解这份官方镜像的打包原理,可以克隆仓库自行研读:

git clone https://gitcode.com/gh_mirrors/to/tomcat

核心文件一览:

  • versions.json:记录每个 Tomcat 系列的版本号、SHA512 校验值和全部变体清单
  • Dockerfile.template:Dockerfile 模板。依次完成:下载 Tomcat → GPG 签名验证 → 编译 Tomcat Native → 清空默认应用 → 修正非 root 运行权限 → 暴露 8080 端口 → 设置默认启动命令
  • apply-templates.sh:按「版本 × 变体」组合,从模板批量生成各目录下的独立 Dockerfile
  • update.sh:一键刷新版本信息并重新生成所有 Dockerfile
  • from.jq/shared.jq:模板辅助函数,负责推导 Java 基础镜像和校验 Java 版本兼容性
  • 10.1/jdk21/temurin-noble/Dockerfile:一份生成产物的实例,可直接查看最终构建过程

六、常见问题速查表 📋

问题解决办法
提示端口 8080 已被占用换宿主机端口:-p 8081:8080,访问http://localhost:8081
启动后访问 404webapps默认为空,按上一节挂载你的应用
容器内存不够通过环境变量限制堆内存:docker run -e JAVA_OPTS="-Xms128m -Xmx256m" ...
挂载目录后应用不可写镜像默认非 root(uid 1000)运行,宿主机挂载目录需保证可写权限
应用是纯 JSP 需在线编译jdk变体(如tomcat:10.1-jdk21),jre变体不含编译器

七、写在最后

现在你已经掌握了 Tomcat Docker 官方镜像的核心用法:一行命令拉起容器、挂载 webapps 部署应用、按项目需求挑选版本与 Java 变体。日常开发调试用jdk变体最省心,生产环境追求精简可以换jre变体。建议新项目优先使用 Tomcat 10.1(jakarta.servlet已成为新标准)。祝你的容器之路顺利!

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

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

C++模板编程:函数模板与类模板的核心差异与工程实践

1. 项目概述&#xff1a;从“形似”到“神异”的模板世界刚接触C模板的开发者&#xff0c;常常会有一个困惑&#xff1a;既然类模板和函数模板看起来语法结构那么相似&#xff0c;都是用template关键字开头&#xff0c;后面跟着一堆尖括号<>&#xff0c;那它们到底有什么…

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

从零收到第一台电台:SDR++ 免费软件定义无线电入门指南

从零收到第一台电台&#xff1a;SDR 免费软件定义无线电入门指南 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus 先听声&#xff0c;再讲原理 黄昏&#xff0c;一架客机刚爬升到高架桥上空&…

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

从线性规划到生产实践:饲料混合方案优化全流程解析

1. 项目概述&#xff1a;从一道题到一套方法论最近在整理资料时&#xff0c;翻到了一个挺有意思的案例&#xff0c;标题就叫“饲料混合加工问题——问题4的混合方案”。乍一看&#xff0c;这像是一道典型的运筹学或生产管理练习题&#xff0c;关于如何用几种原料&#xff0c;以…

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

USB Audio多通道设计:从UAC2协议到TDM接口的工程实践

1. 项目概述&#xff1a;从单声道到交响乐&#xff0c;USB Audio多进多出的设计挑战 做音频硬件开发的朋友&#xff0c;对USB Audio Class&#xff08;UAC&#xff09;协议肯定不陌生。从最简单的USB麦克风、USB声卡&#xff0c;到复杂的专业音频接口&#xff0c;背后都离不开这…

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

Agentic-V2X:基于智能体与小语言模型的车联网实时调度新范式

1. 项目概述最近在车联网和5G/6G网络的研究圈里&#xff0c;一个叫“Agentic-V2X”的概念开始被频繁提及。简单来说&#xff0c;它试图用当前大热的“智能体”和“小语言模型”技术&#xff0c;去解决一个老生常谈但又极其棘手的问题&#xff1a;在车与万物互联的复杂网络里&am…

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

C++函数模板:泛型编程核心机制与实战应用解析

1. 从“重复造轮子”到“一劳永逸”&#xff1a;函数模板的核心价值如果你写过C&#xff0c;大概率遇到过这种场景&#xff1a;你需要一个函数来比较两个整数的大小&#xff0c;于是你写了个int max(int a, int b)。过一会儿&#xff0c;你又需要比较两个浮点数&#xff0c;于是…

作者头像 李华