容器化革命用Docker Compose轻松驾驭JeecgBoot微服务生态在微服务架构盛行的今天JeecgBoot作为国内领先的低代码开发平台其v3.4.2版本已经形成了完整的微服务生态链。然而传统部署方式需要手动配置Hosts、处理服务依赖关系、逐个启动组件这种繁琐流程让许多开发者望而却步。本文将带你用Docker Compose实现一键式容器化部署彻底告别环境配置的噩梦。1. 为什么选择Docker Compose方案传统JeecgBoot微服务部署面临三大痛点环境不一致导致在我机器上能跑的经典问题服务启动顺序依赖带来的调试困难以及配置散落在各处难以管理。容器化技术恰好能完美解决这些问题环境一致性Docker镜像固化运行环境确保开发、测试、生产环境完全一致依赖管理Compose文件明确定义服务间关系自动处理启动顺序配置集中所有服务配置统一在Compose文件中管理版本可控资源隔离每个服务运行在独立容器中避免端口冲突和资源抢占提示即使不熟悉Docker通过本文的编排方案也能快速上手这是比手动配置更简单的选择2. 环境准备与基础架构2.1 所需工具清单确保本地环境已安装以下工具Docker Engine 20.10Docker Compose 2.0Git客户端JDK 1.8仅用于开发调试Maven 3.6仅用于打包# 验证安装 docker --version docker-compose version2.2 服务架构设计JeecgBoot v3.4.2微服务全家桶包含以下核心组件服务类型组件名称容器化方案注册中心Nacos官方镜像nacos/nacos数据库MySQL 5.7mysql:5.7缓存Redis 6redis:6-alpine消息队列RabbitMQ 3-managementrabbitmq:3-management网关Gateway自定义构建系统服务System自定义构建定时任务XXL-Job自定义构建3. Docker Compose编排实战3.1 编写compose.yml创建docker-compose.yml文件定义整个微服务集群version: 3.8 services: nacos: image: nacos/nacos-server:2.0.3 container_name: jeecg-nacos ports: - 8848:8848 environment: - MODEstandalone volumes: - nacos_data:/home/nacos/data mysql: image: mysql:5.7 container_name: jeecg-mysql ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORDjeecg123 - MYSQL_DATABASEjeecg_boot volumes: - mysql_data:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql redis: image: redis:6-alpine container_name: jeecg-redis ports: - 6379:6379 volumes: - redis_data:/data rabbitmq: image: rabbitmq:3-management container_name: jeecg-rabbitmq ports: - 5672:5672 - 15672:15672 environment: - RABBITMQ_DEFAULT_USERjeecg - RABBITMQ_DEFAULT_PASSjeecg123 volumes: - rabbitmq_data:/var/lib/rabbitmq gateway: build: context: ./jeecg-cloud/gateway container_name: jeecg-gateway ports: - 9999:9999 depends_on: - nacos - mysql environment: - NACOS_SERVER_ADDRnacos:8848 system: build: context: ./jeecg-cloud/system container_name: jeecg-system depends_on: - nacos - mysql - redis environment: - NACOS_SERVER_ADDRnacos:8848 volumes: nacos_data: mysql_data: redis_data: rabbitmq_data:3.2 关键配置解析网络配置所有服务默认加入同一个Docker网络直接使用服务名作为主机名访问彻底告别Hosts配置。数据持久化通过volumes确保数据库、配置等关键数据不会随容器销毁而丢失。依赖管理depends_on控制服务启动顺序gateway等待nacos和mysql就绪后才启动。环境变量通过环境变量注入配置如Nacos地址nacos:8848保持配置与代码分离。4. 服务定制与构建4.1 自定义镜像构建每个JeecgBoot微服务需要准备Dockerfile# gateway服务的Dockerfile示例 FROM openjdk:8-jdk-alpine COPY target/jeecg-gateway.jar /app.jar ENTRYPOINT [java,-jar,/app.jar]构建前需要调整的配置项Nacos配置修改bootstrap.yml中的连接信息spring: cloud: nacos: server-addr: nacos:8848数据库配置确保application.yml使用容器服务名datasource: url: jdbc:mysql://mysql:3306/jeecg_bootRedis配置更新为容器内地址redis: host: redis port: 63794.2 初始化脚本准备创建init.sql用于数据库初始化CREATE USER jeecg% IDENTIFIED BY jeecg123; GRANT ALL PRIVILEGES ON jeecg_boot.* TO jeecg%; FLUSH PRIVILEGES;5. 运维与扩展技巧5.1 常用操作命令# 启动所有服务后台模式 docker-compose up -d # 查看服务日志 docker-compose logs -f gateway # 扩展实例数量 docker-compose up -d --scale system2 # 一键停止并清理 docker-compose down5.2 性能优化建议资源限制为生产环境添加CPU和内存限制system: deploy: resources: limits: cpus: 1 memory: 1G健康检查添加健康检查确保服务可用性healthcheck: test: [CMD, curl, -f, http://localhost:8080/actuator/health] interval: 30s timeout: 10s retries: 35.3 扩展新微服务添加新微服务只需三个步骤在Compose文件中添加新服务定义demo: build: ./jeecg-cloud/demo depends_on: - nacos创建对应的DockerfileFROM openjdk:8-jdk-alpine COPY target/jeecg-demo.jar /app.jar ENTRYPOINT [java,-jar,/app.jar]更新网关路由配置INSERT INTO sys_gateway_route (path, service_id) VALUES (/demo/**, jeecg-demo);6. 前端容器化方案虽然后端已经容器化但前端项目同样可以纳入Docker体系frontend: build: ./jeecg-web ports: - 3100:80 environment: - VITE_PROXY[[/jeecgboot,http://gateway:9999]]对应的前端DockerfileFROM node:14 as builder WORKDIR /app COPY package.json . RUN npm install COPY . . RUN npm run build FROM nginx:alpine COPY --frombuilder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf这种多阶段构建方式既保证了构建环境的一致性又使生产镜像保持最小化。