手把手教你用Docker Compose一键部署RuoYi-Cloud微服务全家桶(含Nacos/Redis/MySQL)
基于Docker Compose的RuoYi-Cloud微服务全家桶容器化部署指南在微服务架构日益普及的今天如何高效、快速地部署一套完整的微服务系统成为开发者面临的重要挑战。传统的手动部署方式不仅步骤繁琐而且容易因环境差异导致各种问题。本文将介绍如何利用Docker Compose技术实现RuoYi-Cloud微服务系统的一键式容器化部署涵盖Nacos、Redis、MySQL等核心组件的集成配置。1. 环境准备与项目架构解析RuoYi-Cloud是一个基于Spring Cloud Alibaba的企业级微服务快速开发平台采用前后端分离架构包含网关、认证中心、业务模块等多个组件。传统部署方式需要手动安装配置各种中间件而容器化部署则能显著提升效率和一致性。系统核心组件Nacos服务注册与配置中心默认端口8848Redis缓存服务默认端口6379MySQL关系型数据库默认端口3306GatewayAPI网关服务端口8080Auth认证中心端口9200System系统模块端口9201提示确保本地已安装Docker版本20.10.0和Docker Compose版本1.29.0可通过docker --version和docker-compose --version命令验证。# 检查Docker环境 docker info # 检查Compose版本 docker-compose version2. Docker化改造与镜像构建2.1 项目结构调整从Gitee克隆项目后需为每个微服务模块添加DockerfileRuoYi-Cloud/ ├── docker-compose.yml ├── ruoyi-gateway/ │ ├── Dockerfile │ └── ... ├── ruoyi-auth/ │ ├── Dockerfile │ └── ... └── ...2.2 典型Dockerfile示例以网关模块为例Dockerfile内容如下# 基础镜像 FROM openjdk:8-jdk-alpine # 维护者信息 LABEL maintainerruoyiexample.com # 设置时区 RUN apk add --no-cache tzdata \ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ echo Asia/Shanghai /etc/timezone # 添加应用jar包 ARG JAR_FILEtarget/ruoyi-gateway.jar COPY ${JAR_FILE} app.jar # 暴露端口 EXPOSE 8080 # 启动命令 ENTRYPOINT [java,-jar,/app.jar]2.3 多阶段构建优化对于生产环境推荐使用多阶段构建减少镜像体积# 构建阶段 FROM maven:3.8.4-openjdk-8 AS builder WORKDIR /build COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests # 运行阶段 FROM openjdk:8-jdk-alpine COPY --frombuilder /build/target/ruoyi-gateway.jar /app.jar EXPOSE 8080 ENTRYPOINT [java,-jar,/app.jar]3. Docker Compose编排配置3.1 完整compose文件创建docker-compose.yml文件集成所有服务version: 3.8 services: nacos: image: nacos/nacos-server:2.0.3 container_name: nacos environment: - MODEstandalone - SPRING_DATASOURCE_PLATFORMmysql - MYSQL_SERVICE_HOSTmysql - MYSQL_SERVICE_DB_NAMEry-config - MYSQL_SERVICE_USERroot - MYSQL_SERVICE_PASSWORD123456 ports: - 8848:8848 depends_on: - mysql networks: - ruoyi-net redis: image: redis:6.2.6-alpine container_name: redis command: redis-server --requirepass 123456 ports: - 6379:6379 volumes: - redis-data:/data networks: - ruoyi-net mysql: image: mysql:5.7 container_name: mysql environment: MYSQL_ROOT_PASSWORD: 123456 MYSQL_DATABASE: ry-cloud ports: - 3306:3306 volumes: - mysql-data:/var/lib/mysql - ./sql/ry-cloud.sql:/docker-entrypoint-initdb.d/ry-cloud.sql - ./sql/ry-config.sql:/docker-entrypoint-initdb.d/ry-config.sql networks: - ruoyi-net gateway: build: context: ./ruoyi-gateway container_name: gateway ports: - 8080:8080 environment: - SPRING_PROFILES_ACTIVEprod - SPRING_CLOUD_NACOS_SERVER_ADDRnacos:8848 depends_on: - nacos - redis networks: - ruoyi-net auth: build: context: ./ruoyi-auth container_name: auth ports: - 9200:9200 environment: - SPRING_PROFILES_ACTIVEprod - SPRING_CLOUD_NACOS_SERVER_ADDRnacos:8848 depends_on: - nacos - redis networks: - ruoyi-net networks: ruoyi-net: driver: bridge volumes: mysql-data: redis-data:3.2 关键配置说明网络配置创建专用网络ruoyi-net确保各容器间可通过服务名通信避免使用默认的bridge网络防止端口冲突数据持久化MySQL数据挂载到mysql-data卷Redis数据挂载到redis-data卷Nacos配置存储在MySQL的ry-config库中依赖关系服务启动顺序MySQL → Nacos → Redis → 微服务使用depends_on控制启动依赖4. 数据库初始化与配置4.1 数据库脚本准备在sql目录下准备三个SQL文件ry-config.sqlNacos所需的配置表结构ry-cloud.sql业务系统表结构ry-seata.sql分布式事务表结构注意SQL文件需使用UTF-8编码避免中文乱码问题。将SQL文件放在项目根目录的sql文件夹下compose文件已配置为容器启动时自动执行。4.2 Nacos配置导入通过Nacos API批量导入配置# 导出原有配置 curl -X GET http://localhost:8848/nacos/v1/cs/configs?exporttruegroupDEFAULT_GROUPtenantdataIdsearchaccurate -H Authorization: Bearer $token # 导入配置示例 curl -X POST http://localhost:8848/nacos/v1/cs/configs?importtruenamespace -H Authorization: Bearer $token -F fileconfig.zip或使用Nacos控制台手动配置各微服务的application.yml和bootstrap.yml。5. 系统启动与验证5.1 一键启动命令# 构建镜像并启动所有服务 docker-compose up -d --build # 查看运行状态 docker-compose ps # 查看实时日志 docker-compose logs -f gateway5.2 服务健康检查服务检查URL预期状态Nacoshttp://localhost:8848/nacos200 OKGatewayhttp://localhost:8080404Redisredis-cli pingPONGMySQLmysql -uroot -p连接成功5.3 常见问题排查服务注册失败检查Nacos控制台是否有服务注册验证网络连通性docker exec -it gateway ping nacos查看应用日志docker-compose logs auth数据库连接问题# 进入MySQL容器 docker exec -it mysql mysql -uroot -p123456 # 验证数据库和表是否存在 SHOW DATABASES; USE ry-cloud; SHOW TABLES;6. 生产环境优化建议6.1 性能调优参数MySQL容器优化mysql: environment: - innodb_buffer_pool_size1G - innodb_log_file_size256M - max_connections500 ulimits: nofile: soft: 65536 hard: 65536JVM参数调整# 在Dockerfile的ENTRYPOINT中添加 ENTRYPOINT [java,-Xms512m,-Xmx1024m,-XX:UseG1GC,-jar,/app.jar]6.2 监控与日志方案Prometheus监控配置monitor: image: prom/prometheus ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.ymlELK日志收集logstash: image: docker.elastic.co/logstash/logstash:7.14.0 volumes: - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf6.3 高可用部署架构对于生产环境建议采用以下架构Nacos集群3节点部署Redis哨兵1主2从3哨兵MySQL主从读写分离微服务多实例通过Nacos实现负载均衡nacos1: image: nacos/nacos-server:2.0.3 environment: - MODEcluster - NACOS_SERVERSnacos1:8848 nacos2:8848 nacos3:8848 nacos2: image: nacos/nacos-server:2.0.3 environment: - MODEcluster - NACOS_SERVERSnacos1:8848 nacos2:8848 nacos3:8848 nacos3: image: nacos/nacos-server:2.0.3 environment: - MODEcluster - NACOS_SERVERSnacos1:8848 nacos2:8848 nacos3:88487. 开发调试技巧7.1 远程调试配置在docker-compose.yml中添加JVM调试参数gateway: environment: - JAVA_TOOL_OPTIONS-agentlib:jdwptransportdt_socket,servery,suspendn,address5005 ports: - 5005:5005然后在IDE中创建Remote JVM Debug配置连接到localhost:5005。7.2 热部署方案利用Spring Boot DevTools实现代码热更新# 开发环境Dockerfile FROM maven:3.8.4-openjdk-8 as dev WORKDIR /app COPY . . RUN mvn package -DskipTests CMD [mvn, spring-boot:run]7.3 配置管理最佳实践多环境配置通过Nacos的Namespace隔离不同环境敏感信息加密使用Nacos的Config Filter机制配置版本控制定期导出Nacos配置到Git仓库# 定期备份Nacos配置 docker exec nacos bash -c tar -czvf /home/nacos/conf-backup.tar.gz /home/nacos/conf docker cp nacos:/home/nacos/conf-backup.tar.gz .