容器化部署RuoYi-Cloud微服务全家桶实战指南
容器化部署的价值与优势
在微服务架构日益普及的今天,开发环境的一致性问题成为许多团队面临的挑战。传统本地部署方式需要手动安装配置Nacos、Redis、MySQL等中间件,不仅耗时耗力,还容易因环境差异导致"在我机器上能运行"的经典问题。容器化技术通过标准化环境定义,完美解决了这一痛点。
Docker Compose作为多容器编排工具,允许开发者通过一个YAML文件定义整套服务栈。对于RuoYi-Cloud这样的微服务系统,使用Docker Compose可以:
- 一键启动所有依赖服务和业务模块
- 环境隔离避免端口冲突和依赖污染
- 配置固化确保团队每个成员使用完全相同的环境
- 快速重置测试完成后可立即清理,不留残余
1. 环境准备与Docker配置
1.1 系统要求与Docker安装
确保宿主机满足以下最低配置:
- 操作系统:Linux/Windows 10+/macOS(建议使用Linux获得最佳性能)
- 内存:8GB以上(微服务系统较耗内存)
- Docker版本:20.10.0+
- Docker Compose版本:1.29.0+
对于Windows用户,需要特别注意:
- 启用WSL2后端(Windows 10 2004及以上版本)
- 在Docker Desktop设置中分配至少4GB内存
- 关闭可能冲突的端口(如3306、8848等)
# 验证Docker安装 docker --version docker-compose --version # 检查Docker运行状态 docker system info1.2 项目文件准备
从Gitee获取RuoYi-Cloud最新代码:
git clone https://gitee.com/y_project/RuoYi-Cloud.git cd RuoYi-Cloud项目结构关键目录说明:
├── docker-compose.yml # 容器编排主文件 ├── nacos # Nacos配置中心Docker配置 ├── mysql # 数据库初始化脚本 ├── redis # Redis配置文件 └── ruoyi-modules # 各业务模块Dockerfile2. Docker Compose核心配置解析
2.1 编排文件架构设计
我们设计的docker-compose.yml包含以下服务组:
version: '3.8' services: nacos-server: image: nacos/nacos-server:2.0.3 # ...其他配置 mysql-master: image: mysql:8.0.25 # ...其他配置 redis: image: redis:6.2.5 # ...其他配置 ruoyi-gateway: build: ./ruoyi-gateway # ...其他配置 # 其他微服务模块...2.2 网络与存储配置
自定义网络确保服务间隔离通信:
networks: ruoyi-net: driver: bridge ipam: config: - subnet: 172.28.0.0/16数据卷配置实现数据持久化:
volumes: mysql-data: nacos-data: redis-data:2.3 关键服务参数详解
以Nacos服务为例展示详细配置:
nacos-server: image: nacos/nacos-server:2.0.3 container_name: nacos-server environment: - MODE=standalone - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql-master - MYSQL_SERVICE_DB_NAME=ry-config - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=123456 ports: - "8848:8848" volumes: - nacos-data:/home/nacos/data networks: - ruoyi-net healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8848/nacos"] interval: 30s timeout: 10s retries: 33. 数据库与中间件配置
3.1 MySQL容器化配置
MySQL服务配置要点:
- 预设三个数据库:
ry-cloud、ry-config、ry-seata - 自动执行初始化SQL脚本
- 配置合理的字符集和事务隔离级别
mysql-master: image: mysql:8.0.25 container_name: mysql-master environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: ry-cloud TZ: Asia/Shanghai command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --transaction-isolation=READ-COMMITTED ports: - "3306:3306" volumes: - mysql-data:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d networks: - ruoyi-net3.2 Redis优化配置
Redis生产级配置建议:
redis: image: redis:6.2.5 container_name: redis command: redis-server --appendonly yes --requirepass 123456 ports: - "6379:6379" volumes: - redis-data:/data - ./redis/redis.conf:/usr/local/etc/redis/redis.conf networks: - ruoyi-net附redis.conf关键修改:
maxmemory 1gb maxmemory-policy allkeys-lru timeout 300 tcp-keepalive 604. 微服务容器化实践
4.1 构建自定义镜像
每个微服务模块需要提供Dockerfile,以网关服务为例:
# ruoyi-gateway/Dockerfile FROM openjdk:11-jre-slim WORKDIR /app COPY target/ruoyi-gateway.jar app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","app.jar"]构建命令:
# 在项目根目录执行 mvn clean package -DskipTests docker-compose build ruoyi-gateway4.2 服务依赖与启动顺序控制
使用depends_on结合健康检查确保启动顺序:
ruoyi-gateway: build: ./ruoyi-gateway depends_on: nacos-server: condition: service_healthy redis: condition: service_started networks: - ruoyi-net4.3 配置管理最佳实践
Nacos配置集中管理:
- 将各模块
application.yml配置迁移到Nacos - 使用
shared-configs实现配置共享 - 区分
dev/test/prod不同环境配置
- 将各模块
敏感信息处理:
spring: datasource: password: ${MYSQL_PASSWORD:123456}通过环境变量传入敏感信息
5. 系统部署与运维
5.1 一键启动与停止
启动完整系统:
docker-compose up -d停止并清理:
docker-compose down5.2 常用运维命令
查看服务日志:
docker-compose logs -f ruoyi-gateway服务扩缩容:
docker-compose up -d --scale ruoyi-system=35.3 性能监控方案
集成Prometheus+Grafana监控栈:
monitoring: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml示例prometheus.yml配置:
scrape_configs: - job_name: 'ruoyi-cloud' metrics_path: '/actuator/prometheus' static_configs: - targets: ['ruoyi-gateway:8080', 'ruoyi-system:9201']6. 常见问题排查指南
6.1 容器启动失败排查步骤
查看容器日志:
docker logs -f <container_id>检查服务依赖:
docker-compose ps验证网络连通性:
docker exec -it ruoyi-gateway curl nacos-server:8848
6.2 典型问题解决方案
问题1:Nacos无法连接MySQL
- 检查MySQL容器是否正常运行
- 验证Nacos中配置的MySQL用户名密码
- 确认网络是否互通
问题2:Redis连接超时
- 检查Redis密码配置
- 验证各模块的Redis地址配置
- 查看Redis内存使用情况
问题3:微服务注册失败
- 确认Nacos控制台是否可访问
- 检查各服务的
spring.cloud.nacos.discovery配置 - 查看服务IP是否在Nacos白名单中
7. 生产环境优化建议
7.1 安全加固措施
修改默认密码:
- MySQL root密码
- Redis访问密码
- Nacos控制台密码
网络隔离:
networks: ruoyi-net: internal: true镜像安全扫描:
docker scan <image_name>
7.2 性能调优参数
JVM调优建议(Dockerfile):
ENV JAVA_OPTS="-Xms512m -Xmx512m -XX:MaxMetaspaceSize=256m" ENTRYPOINT exec java $JAVA_OPTS -jar app.jarMySQL性能参数:
command: --innodb_buffer_pool_size=256M --innodb_log_file_size=128M7.3 高可用方案设计
生产环境建议架构:
- Nacos集群:3节点部署
- MySQL主从:读写分离
- Redis哨兵:自动故障转移
- 微服务多实例:负载均衡
nacos-server: deploy: replicas: 38. 进阶扩展与定制
8.1 自定义模块添加
添加新微服务模块步骤:
- 在
ruoyi-modules创建新模块 - 编写Dockerfile
- 在compose文件中添加服务定义
- 配置Nacos服务发现
8.2 CI/CD集成示例
.gitlab-ci.yml示例片段:
stages: - build - deploy build: stage: build script: - mvn clean package -DskipTests - docker-compose build deploy: stage: deploy script: - docker-compose up -d8.3 多环境配置管理
使用Compose扩展功能:
# docker-compose.prod.yml services: ruoyi-gateway: environment: - SPRING_PROFILES_ACTIVE=prod启动命令:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d