1. 核心差异概述
在 Apache Tomcat 的使用过程中,用户可能会发现:
-
官网下载的 ZIP/Tar.gz 发行包:
webapps目录包含默认的主页(ROOT)和示例应用(examples、docs、manager、host-manager)。 -
Docker 官方镜像(Tomcat 9.0.30+):
webapps目录为空,但同级目录下存在webapps.dist,其中存放了默认应用。
关键版本变化:
-
Tomcat 9.0.30:Docker 镜像首次将
webapps清空,并引入webapps.dist存放默认应用。 -
Apache 官方 ZIP 包(所有版本):始终使用
webapps存放默认应用,未采用webapps.dist方案。
2. 为什么会有这种差异?
(1)Apache 官方发行包(ZIP/Tar.gz)
- 设计目标:保持向后兼容性,确保用户下载后可直接运行,无需额外配置。
-
目录结构:
webapps/ ├── ROOT/# 默认主页 ├── docs/# Tomcat 文档 ├── examples/# 示例应用 ├── manager/# 管理界面 └── host-manager/# 虚拟主机管理 - 适用场景:适合开发、测试环境快速使用。
(2)Docker 官方镜像(Tomcat 9.0.30+)
- 设计目标:
-
安全性:避免默认启用
manager和host-manager(可能暴露风险)。 - 最小化镜像:减少不必要文件,优化镜像体积。
- 灵活性:让用户自行决定是否启用示例应用。
-
目录结构:
webapps/# 空目录 webapps.dist/ ├── ROOT/ ├── docs/ ├── examples/ ├── manager/ └── host-manager/ - 适用场景:更适合生产环境,需手动启用默认应用。
3. Docker 镜像如何启用默认应用?
如果需要在 Docker 中使用 Tomcat 的默认应用(如 examples 或 manager),可以通过以下方式启用:
方法 1:启动容器时自动启用
docker run -d --name mytomcat \
tomcat:10.0.13 \
bash -c "mv webapps.dist/* webapps/ && catalina.sh run"
方法 2:通过 Dockerfile 构建自定义镜像
FROM tomcat:10.0.13
RUN mv webapps.dist/* webapps/
然后构建并运行:
docker build -t my-tomcat .
docker run -d -p 8080:8080 my-tomcat
方法 3:直接挂载 webapps.dist(适用于开发调试)
docker run -d -p 8080:8080 \
-v /path/to/local/webapps.dist:/usr/local/tomcat/webapps \
tomcat:10.0.13
4. 生产环境建议
-
禁用默认应用:
生产环境建议保持webapps为空,仅部署必要的应用(如yourapp.war),避免暴露manager或examples。 -
安全加固:
如果必须使用manager,应配置强密码并限制访问 IP:<!-- conf/tomcat-users.xml --> <role rolename="manager-gui"/> <user username="admin" password="SecurePassword123!" roles="manager-gui"/>
5. 总结
| 对比项 | Apache 官方 ZIP 包 | Docker 官方镜像(9.0.30+) |
|---|---|---|
webapps 目录 |
包含默认应用 | 空目录 |
webapps.dist 目录 |
不存在 | 存放默认应用 |
| 默认行为 | 直接可用 | 需手动启用 |
| 适用场景 | 开发/测试 | 生产/定制化部署 |
关键结论:
-
Tomcat 9.0.30+ 的 Docker 镜像 默认禁用示例应用,需手动从
webapps.dist启用。 -
官网 ZIP 包 仍沿用传统方式,
webapps包含所有默认应用。 -
生产环境 建议保持
webapps纯净,仅部署必要应用。