Docker 安装 Tomcat(实战总结)

为什么选择 Docker 安装 Tomcat?

在开发 Java Web 应用时,Tomcat 是一个非常常见且稳定的应用服务器。它负责运行基于 Java Servlet 和 JSP 的 Web 项目。然而,直接在本地机器上安装和配置 Tomcat,往往伴随着环境依赖冲突、版本不一致、配置混乱等问题。比如你可能遇到:Java 版本不匹配、端口被占用、配置文件路径错误、权限问题等,这些都会让初学者感到头疼。

这时候,Docker 就成了一个理想的解决方案。Docker 能把整个 Tomcat 环境打包成一个“容器”,就像一个独立的、自带运行环境的“小盒子”。你只需要运行一条命令,就能快速启动一个可运行的 Tomcat 实例,无需关心底层系统配置。

想象一下:你不需要在电脑里装一堆软件,也不用担心别人电脑的环境和你的不一样。只要有一台装了 Docker 的机器,你就能运行一个完全一致的 Tomcat 环境。这就是 Docker 的魅力所在。

而“Docker 安装 Tomcat”这个操作,正是迈向现代化开发流程的第一步。它不仅简化了部署,还为后续的 CI/CD、多环境部署打下坚实基础。


准备工作:安装 Docker 环境

在开始之前,你需要确保你的开发机上已经安装了 Docker。无论是 Windows、macOS 还是 Linux,Docker 都提供了官方的安装包。

安装方式

  • Windows / macOS:推荐使用 Docker Desktop 。它是一个图形化工具,安装简单,自动配置好 Docker 引擎。

  • Linux:可以使用包管理器安装,比如 Ubuntu 上执行:

    # 更新软件源
    sudo apt update
    
    # 安装必要依赖
    sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
    
    # 添加 Docker 官方 GPG 密钥
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
    # 添加 Docker 仓库
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    # 更新并安装 Docker Engine
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io
    

验证安装

安装完成后,运行以下命令检查 Docker 是否正常工作:

docker --version

再运行一个测试容器,确认服务可用:

docker run hello-world

💡 小贴士:如果你在 Linux 上遇到权限问题(如提示“Permission denied”),可以将当前用户加入 docker 用户组:

sudo usermod -aG docker $USER

然后重新登录系统,或重启终端。


拉取并运行 Tomcat 容器

现在我们正式进入“Docker 安装 Tomcat”的核心环节。Docker Hub 上官方维护了 Tomcat 镜像,我们只需一条命令即可拉取并运行。

拉取官方 Tomcat 镜像

docker pull tomcat:9.0-jdk11-openjdk-slim
  • tomcat:镜像名称
  • 9.0:Tomcat 版本号(这里用 9.0,是目前主流稳定版本)
  • jdk11:JDK 版本,使用 OpenJDK 11
  • openjdk-slim:精简版镜像,体积小,适合生产环境

⚠️ 注意:slim 版本去掉了部分不必要的工具,适合轻量部署,但如果你需要调试或使用某些工具(如 curl),建议使用 alpinefull 版本。

启动 Tomcat 容器

docker run -d \
  --name my-tomcat \
  -p 8080:8080 \
  -v $(pwd)/webapps:/usr/local/tomcat/webapps \
  -v $(pwd)/logs:/usr/local/tomcat/logs \
  tomcat:9.0-jdk11-openjdk-slim

我们来逐行解释这条命令的含义:

  • docker run:创建并启动一个容器
  • -d:后台运行(detached 模式),不占用终端
  • --name my-tomcat:为容器命名,方便后续管理
  • -p 8080:8080:将宿主机的 8080 端口映射到容器的 8080 端口。Tomcat 默认监听 8080,这样你就能通过 http://localhost:8080 访问
  • -v $(pwd)/webapps:/usr/local/tomcat/webapps:将当前目录下的 webapps 文件夹挂载到容器的 webapps 目录。这样你可以在宿主机上直接放 WAR 包或 Web 项目,容器会自动识别
  • -v $(pwd)/logs:/usr/local/tomcat/logs:挂载日志目录,方便查看运行日志
  • tomcat:9.0-jdk11-openjdk-slim:使用的镜像名称

📌 提示:$(pwd) 是一个 Bash 命令,表示“当前目录路径”。如果你在 Windows 上使用 CMD,可以改为 %cd%


验证 Tomcat 是否正常运行

启动容器后,我们可以通过以下方式验证 Tomcat 是否成功运行。

查看容器状态

docker ps

输出示例:

CONTAINER ID   IMAGE                         COMMAND                  CREATED         STATUS         PORTS                    NAMES
a1b2c3d4e5f6   tomcat:9.0-jdk11-openjdk-slim   "catalina.sh run"        2 minutes ago     Up 2 minutes   0.0.0.0:8080->8080/tcp   my-tomcat

如果看到 STATUSUp,且 PORTS 显示 0.0.0.0:8080->8080/tcp,说明容器正在运行。

访问 Tomcat 首页

打开浏览器,访问 http://localhost:8080

你应该能看到 Tomcat 的默认欢迎页面,显示“Apache Tomcat 9.0”字样。这说明 Tomcat 已成功启动!

🛠️ 如果访问失败,可以检查:

  • Docker 是否正在运行
  • 端口 8080 是否被其他程序占用(如另一个 Tomcat)
  • 防火墙是否阻止了连接

部署你的第一个 Web 应用

现在我们来部署一个简单的 Web 项目。假设你有一个名为 myapp.war 的文件,它是一个标准的 Java Web 应用包。

准备项目文件

在当前目录下创建一个文件夹,并放入你的 WAR 包:

mkdir -p webapps

cp /path/to/your/myapp.war ./webapps/

💡 WAR 文件是 Java Web 应用的标准打包格式,类似于 Java 的 JAR 包,但用于 Web 项目。

启动后自动加载应用

当你把 WAR 文件放入挂载的 webapps 目录后,Tomcat 容器会自动解压并部署它。

你可以在浏览器中访问:

http://localhost:8080/myapp

如果部署成功,你应该能看到你的应用页面。

📌 注意:容器启动后,Tomcat 会自动扫描 webapps 目录。如果 WAR 文件已存在,它会在启动时自动部署。


常用管理命令与故障排查

掌握一些常用命令,能让你更高效地管理 Docker 中的 Tomcat。

查看日志

docker logs my-tomcat

这会输出 Tomcat 的启动日志。如果应用部署失败,可以查看这里是否有错误信息,比如 ClassNotFoundExceptionport already in use 等。

进入容器内部调试

如果你需要进入容器内部查看文件或执行命令:

docker exec -it my-tomcat /bin/bash

进入后,你可以查看文件结构、检查配置、运行命令等。

例如:ls /usr/local/tomcat/webapps 可以查看已部署的应用。

重启或停止容器

docker stop my-tomcat

docker start my-tomcat

docker rm -f my-tomcat

常见问题解决

问题 原因 解决方法
访问 http://localhost:8080 失败 端口被占用 检查是否有其他进程占用 8080,或改用 -p 8081:8080
WAR 文件未部署 文件路径错误 确保 webapps 目录挂载正确,文件名无误
启动失败,提示“Permission denied” 文件权限问题 检查宿主机文件权限,或使用 sudo 运行命令

总结与建议

通过本文,你已经完成了“Docker 安装 Tomcat”的全流程:从环境准备、镜像拉取、容器运行,到应用部署和日常管理。整个过程清晰、可重复,特别适合初学者快速上手。

Docker 让开发环境变得“可复制、可移植、可控制”。你不再需要为“在我电脑上能跑”的问题而烦恼。只要一个命令,就能在任何支持 Docker 的机器上运行相同的 Tomcat 环境。

建议你在项目中将 Dockerfile 和 docker-compose.yml 作为标准配置,实现一键部署。未来当你需要将应用部署到测试、预发布或生产环境时,只需切换配置,无需手动安装。

最后提醒:生产环境中建议使用更安全的镜像版本(如 alpine),并设置合理的资源限制(如内存、CPU),避免容器占用过多资源。

掌握了“Docker 安装 Tomcat”这一技能,你已经迈出了现代化开发的第一步。继续深入学习 Docker Compose、Kubernetes,你会发现,容器化技术正在重塑整个软件交付流程。