Skip to content

Docker Compose 部署 Tomcat

Docker Compose 是部署 Tomcat 服务的理想工具,它可以通过一个简单的 YAML 文件定义和运行 Tomcat 容器。下面我将详细介绍如何使用 Docker Compose 部署 Tomcat,包括基础配置、生产环境优化以及常见问题解决方案。

1. 基础部署配置

1.1 创建项目目录结构

首先创建一个标准的目录结构来管理 Tomcat 配置和应用程序文件:

tomcat-compose/
├── docker-compose.yml
├── webapps/          # 存放WAR包的目录
└── conf/             # 自定义配置文件目录

1.2 基础 docker-compose.yml 配置

在项目根目录创建docker-compose.yml文件,内容如下:

yaml
version: "3.8"
services:
  tomcat:
    image: tomcat:latest # 或指定版本如tomcat:9-jdk8-openjdk
    container_name: my-tomcat
    ports:
      - "8080:8080" # 主机端口:容器端口
    volumes:
      - ./webapps:/usr/local/tomcat/webapps # 挂载应用程序目录
      - ./conf/server.xml:/usr/local/tomcat/conf/server.xml # 自定义配置
    environment:
      - TZ=Asia/Shanghai # 设置时区
    restart: unless-stopped

这个配置定义了一个 Tomcat 服务,使用官方最新镜像,将容器的 8080 端口映射到主机的 8080 端口,并挂载了 webapps 目录和配置文件。

1.3 启动 Tomcat 容器

运行以下命令构建并启动容器:

bash
docker-compose up -d

-d参数让容器在后台运行。启动后可以通过http://localhost:8080访问 Tomcat 默认页面。

2. 高级配置选项

2.1 部署 WAR 应用程序

有两种方式部署 WAR 应用到 Tomcat 容器:

方式一:通过 volumes 挂载

yaml
volumes:
  - ./myapp.war:/usr/local/tomcat/webapps/myapp.war

方式二:通过 Dockerfile 构建

创建Dockerfile

dockerfile
FROM tomcat:latest
COPY ./myapp.war /usr/local/tomcat/webapps/

然后在docker-compose.yml中使用 build 指令:

yaml
services:
  tomcat:
    build: .
    ports:
      - "8080:8080"

这种方式适合需要自定义镜像的场景。

2.2 配置 JVM 参数

可以通过环境变量配置 Tomcat 的 JVM 参数:

yaml
environment:
  - CATALINA_OPTS=-Xms512M -Xmx1024M -Djava.awt.headless=true

2.3 数据库集成

Tomcat 通常需要连接数据库,可以添加 MySQL 服务:

yaml
services:
  tomcat:
    # ...原有配置
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: mydb
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "3306:3306"

volumes:
  mysql-data:

然后在 Tomcat 应用中配置数据库连接池指向db:3306

3. 生产环境优化

3.1 资源限制

yaml
services:
  tomcat:
    # ...其他配置
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: 2G

3.2 健康检查

yaml
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:8080"]
  interval: 30s
  timeout: 10s
  retries: 3

3.3 日志配置

yaml
volumes:
  - ./logs:/usr/local/tomcat/logs

4. 常见问题与解决方案

  1. 端口冲突

    • 修改docker-compose.yml中的端口映射:"8081:8080"
  2. 时区问题

    • 确保设置TZ环境变量:TZ=Asia/Shanghai
  3. 应用部署失败

    • 检查 WAR 文件权限和挂载路径是否正确
  4. 性能问题

    • 调整 JVM 参数和资源限制

5. 常用命令参考

命令描述
docker-compose up -d启动服务(后台模式)
docker-compose down停止并移除容器
docker-compose logs -f tomcat查看 Tomcat 日志
docker-compose ps查看服务状态
docker-compose exec tomcat bash进入容器 shell
docker-compose restart tomcat重启 Tomcat 服务

通过以上配置和最佳实践,你可以轻松地使用 Docker Compose 部署 Tomcat 服务,无论是开发环境还是生产环境。根据你的具体需求,可以调整配置中的参数和选项。