1. 核心差異概述

在 Apache Tomcat 的使用過程中,用户可能會發現:

  • 官網下載的 ZIP/Tar.gz 發行包webapps 目錄包含默認的主頁(ROOT)和示例應用(examplesdocsmanagerhost-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+)

  • 設計目標
  • 安全性:避免默認啓用 managerhost-manager(可能暴露風險)。
  • 最小化鏡像:減少不必要文件,優化鏡像體積。
  • 靈活性:讓用户自行決定是否啓用示例應用。
  • 目錄結構
webapps/# 空目錄
webapps.dist/
├── ROOT/
├── docs/
├── examples/
├── manager/
└── host-manager/
  • 適用場景:更適合生產環境,需手動啓用默認應用。

3. Docker 鏡像如何啓用默認應用?

如果需要在 Docker 中使用 Tomcat 的默認應用(如 examplesmanager),可以通過以下方式啓用:

方法 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),避免暴露 managerexamples
  • 安全加固
    如果必須使用 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 目錄

不存在

存放默認應用

默認行為

直接可用

需手動啓用

適用場景

開發/測試

生產/定製化部署

關鍵結論

  1. Tomcat 9.0.30+ 的 Docker 鏡像 默認禁用示例應用,需手動從 webapps.dist 啓用。
  2. 官網 ZIP 包 仍沿用傳統方式,webapps 包含所有默認應用。
  3. 生產環境 建議保持 webapps 純淨,僅部署必要應用。