容器化部署 Tomcat + MySQL 实战指南

环境准备与工具安装

确保已安装 Docker 和 Docker Compose。Docker 用于构建和运行容器,Docker Compose 用于定义多容器应用。
检查 Docker 版本:

docker --version

安装 Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
编写 Dockerfile 构建 Tomcat 镜像

创建目录 tomcat-mysql 并新建 Dockerfile

FROM tomcat:10.1-jdk17
COPY ./webapp.war /usr/local/tomcat/webapps/

将 WAR 文件放入目录,构建镜像:

docker build -t my-tomcat-app .
配置 MySQL 容器

新建 docker-compose.yml 文件:

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: appdb
    volumes:
      - mysql_data:/var/lib/mysql
  tomcat:
    image: my-tomcat-app
    ports:
      - "8080:8080"
    depends_on:
      - mysql
volumes:
  mysql_data:
启动容器并验证

运行以下命令启动服务:

docker-compose up -d

验证 Tomcat 是否运行:

curl http://localhost:8080

检查 MySQL 连接:

docker exec -it tomcat-mysql_mysql_1 mysql -uroot -prootpass
数据持久化与网络配置

MySQL 数据通过 Docker 卷持久化,确保容器重启后数据不丢失。
自定义网络可提升容器间通信效率:

networks:
  app_net:
    driver: bridge

在服务配置中添加 networks 字段引用该网络。

进阶优化与安全

限制容器资源使用以防止过载:

tomcat:
  deploy:
    resources:
      limits:
        cpus: '0.5'
        memory: 512M

配置 MySQL 安全选项:

environment:
  MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
  MYSQL_USER: appuser
  MYSQL_PASSWORD: ${DB_PASSWORD}

使用环境变量文件(.env)管理敏感信息。

日志与监控

查看容器日志:

docker-compose logs -f

集成 Prometheus 和 Grafana 监控容器性能:

monitoring:
  image: prom/prometheus
  ports:
    - "9090:9090"
常见问题排查

容器启动失败时检查日志:

docker-compose logs mysql

端口冲突时修改 docker-compose.yml 中的端口映射。
数据库连接问题需验证 JDBC URL 和凭证是否匹配容器配置。

CI/CD 集成示例

GitLab CI 示例片段:

deploy:
  stage: deploy
  script:
    - docker-compose down
    - docker-compose up -d --build

结合 Jenkins 或 GitHub Actions 实现自动化构建与部署。

通过以上步骤,可实现 Tomcat 与 MySQL 的容器化部署及生产级优化。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐