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+)
|
|
|
包含默認應用
|
空目錄
|
|
|
不存在
|
存放默認應用
|
|
默認行為 |
直接可用
|
需手動啓用
|
|
適用場景 |
開發/測試
|
生產/定製化部署
|
關鍵結論:
- Tomcat 9.0.30+ 的 Docker 鏡像 默認禁用示例應用,需手動從
webapps.dist啓用。 - 官網 ZIP 包 仍沿用傳統方式,
webapps包含所有默認應用。 - 生產環境 建議保持
webapps純淨,僅部署必要應用。