Docker Compose一键部署TeamCity 2023.05.2(含MySQL/无MySQL两种配置)
Docker Compose实战TeamCity 2023.05.2企业级部署指南在持续集成领域TeamCity以其强大的构建流水线管理和与JetBrains生态的无缝集成成为众多技术团队的首选。本文将深入探讨如何通过Docker Compose这一声明式工具实现TeamCity 2023.05.2版本的高效部署特别针对有无MySQL环境的两种典型场景提供完整解决方案。1. 环境准备与架构设计部署前的环境评估至关重要。对于资源受限的开发环境建议至少分配4GB内存和2核CPU生产环境则需根据团队规模适当扩容。TeamCity的标准架构包含三个核心组件Server节点处理构建调度和结果存储默认端口8111Agent节点执行实际构建任务默认端口9090数据库服务支持MySQL/PostgreSQL等主流数据库# 验证Docker环境 docker --version docker-compose --version提示若使用Windows系统建议启用WSL2以获得更好的性能表现。Linux环境下需确保当前用户具有docker组权限。2. 独立MySQL容器部署方案对于没有现成数据库服务的环境以下配置将同时启动MySQL和TeamCity服务version: 3.8 services: mysql: image: mysql:8.0 command: - --default-authentication-pluginmysql_native_password - --character-set-serverutf8mb4 - --collation-serverutf8mb4_unicode_ci environment: MYSQL_ROOT_PASSWORD: TcSecure123 MYSQL_DATABASE: teamcity MYSQL_USER: teamcity MYSQL_PASSWORD: TeamCity2023 volumes: - mysql_data:/var/lib/mysql healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 5s timeout: 10s retries: 10 teamcity: image: jetbrains/teamcity-server:2023.05.2 depends_on: mysql: condition: service_healthy environment: TEAMCITY_DB_HOST: mysql TEAMCITY_DB_NAME: teamcity TEAMCITY_DB_USER: teamcity TEAMCITY_DB_PASSWORD: TeamCity2023 volumes: - teamcity_data:/data/teamcity_server/datadir - teamcity_logs:/opt/teamcity/logs ports: - 8111:8111 agent1: image: jetbrains/teamcity-agent:2023.05.2 environment: SERVER_URL: http://teamcity:8111 volumes: - /var/run/docker.sock:/var/run/docker.sock privileged: true volumes: mysql_data: teamcity_data: teamcity_logs:关键参数解析配置项说明推荐值MYSQL_ROOT_PASSWORD数据库root密码符合复杂度要求的字符串healthcheck确保MySQL就绪至少5秒间隔TEAMCITY_DB_*数据库连接参数与MySQL服务对应privilegedAgent容器特权模式需要Docker in Docker时启用3. 外接MySQL服务配置方案当已有企业级MySQL服务时精简版配置如下version: 3.8 services: teamcity: image: jetbrains/teamcity-server:2023.05.2 environment: TEAMCITY_DB_HOST: 192.168.1.100 TEAMCITY_DB_PORT: 3306 TEAMCITY_DB_NAME: teamcity_prod TEAMCITY_DB_USER: teamcity_user TEAMCITY_DB_PASSWORD: ProdSecure2023 volumes: - teamcity_data:/data/teamcity_server/datadir - teamcity_logs:/opt/teamcity/logs ports: - 8111:8111 agent1: image: jetbrains/teamcity-agent:2023.05.2 environment: SERVER_URL: http://teamcity:8111 deploy: resources: limits: cpus: 2 memory: 4G volumes: teamcity_data: teamcity_logs:外接数据库注意事项提前在MySQL创建专用数据库账户确保网络连通性和白名单设置生产环境建议配置SSL加密连接定期备份数据库和volume数据4. 部署验证与故障排查服务启动命令docker-compose up -d docker-compose logs -f teamcity常见问题处理JDBC驱动缺失报错No suitable JDBC driver found for database type: MySQL解决方案访问http://server:8111进入Web界面下载页面提供的JDBC驱动或手动上传mysql-connector-java-8.0.xx.jar数据库连接失败检查要点确认MySQL服务可达验证账号权限检查防火墙规则查看TeamCity日志定位具体错误管理员密码恢复docker exec -it jetbrains-teamcity grep Super user authentication token /opt/teamcity/logs/teamcity-server.log5. 生产环境优化建议性能调优参数environment: TEAMCITY_SERVER_MEM_OPTS: -Xmx4g -XX:ReservedCodeCacheSize512m TEAMCITY_AGENT_MEM_OPTS: -Xmx2g高可用架构使用云数据库服务保障数据库可用性配置多个Agent实现负载均衡定期备份关键数据# 备份数据库 docker exec mysql sh -c exec mysqldump --databases teamcity -uteamcity -p$TEAMCITY_DB_PASSWORD backup.sql # 备份配置 docker run --rm -v teamcity_data:/volume -v $(pwd):/backup alpine tar cvf /backup/teamcity_data.tar /volume安全加固措施替换默认自签名证书配置基于角色的访问控制启用构建日志加密定期更新容器镜像版本在实际项目部署中我们发现合理配置volume挂载路径可以显著提升I/O性能。对于Windows宿主机的场景建议将数据卷映射到WSL2子系统而非直接挂载NTFS分区。