在 Windows 11 上使用 Docker Compose 编排 Spring Boot 开发所需的多个容器
在 Windows 11 上使用 Docker Compose 编排 Spring Boot 开发所需的多个容器(如 MySQL、Redis、RabbitMQ、Nacos 等),可通过一个统一的 docker-compose.yml 文件实现一键启动与管理。以下是基于最新公开资料整理的完整方案。
核心步骤
确保环境已就绪
已安装 Docker Desktop for Windows(支持 WSL2 后端)。
Docker 引擎和 Docker Compose 均已启用(默认集成于 Docker Desktop)。
创建项目目录结构
my-springboot-app/
├── docker-compose.yml 主编排文件
├── src/ Spring Boot 源码
└── Dockerfile 可选:用于构建 Spring Boot 镜像
编写 docker-compose.yml 文件
示例配置包含 Spring Boot 应用、MySQL、Redis、RabbitMQ 和 Nacos:
version: '3.8'
services:
Spring Boot 应用(假设已打包为 JAR,或通过构建生成)
spring-boot-app:
build: . 若需构建镜像,使用本地 Dockerfile
image: openjdk:8-jdk 或直接使用基础镜像运行 JAR(不推荐生产)
ports:
- "8080:8080" 映射宿主机 8080 到容器 8080
depends_on:
- mysql
- redis
- rabbitmq
- nacos
environment:
SPRING_PROFILES_ACTIVE: docker
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydb?useSSL=false&serverTimezone=UTC
SPRING_REDIS_HOST: redis
SPRING_RABBITMQ_HOST: rabbitmq
NACOS_SERVER_ADDR: nacos:8848
networks:
- app-network
MySQL 数据库
mysql:
image: mysql:5.7
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
Redis 缓存
redis:
image: redis:7.0-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
command: redis-server --appendonly yes
networks:
- app-network
RabbitMQ 消息队列
rabbitmq:
image: rabbitmq:3.9-management
ports:
- "5672:5672"
- "15672:15672" 管理界面
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
networks:
- app-network
Nacos 服务发现与配置中心
nacos:
image: nacos/nacos-server:v2.4.1
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
environment:
MODE: standalone
SPRING_PROFILES_ACTIVE: standalone
networks:
- app-network
volumes:
mysql-data:
redis-data:
networks:
app-network:
driver: bridge
✅ 说明:
Spring Boot 应用通过 build: . 从本地构建,需配合 Dockerfile(见下文)。
所有服务处于同一自定义网络 app-network,可通过服务名(如 mysql、redis)互相访问 。
端口映射仅用于宿主机访问容器内部服务(如数据库客户端、管理界面)。
创建 Dockerfile(可选但推荐)
若 Spring Boot 项目未预打包,建议创建 Dockerfile 用于构建镜像:
FROM openjdk:8-jdk-slim
ARG JAR_FILE=target/my-springboot-app.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
⚠️ 注意:开发阶段可直接挂载本地 JAR 文件避免重复构建,但生产推荐使用镜像 。
启动服务
在 docker-compose.yml 所在目录执行:
docker-compose up -d
-d 表示后台运行。
首次运行会自动拉取镜像、创建网络与卷,并启动所有容器 。
常用管理命令
查看状态:docker-compose ps
查看日志:docker-compose logs -f spring-boot-app
停止并清理:docker-compose down
仅停止服务(保留数据):docker-compose stop
Spring Boot 集成优化(可选)
若希望 Spring Boot 自动管理 Docker Compose 生命周期(即启动应用时自动拉起依赖容器),可引入官方支持模块:
添加 Maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-docker-compose</artifactId>
<optional>true</optional>
</dependency>
在 application.yml 中配置:
spring:
docker:
compose:
file: docker-compose.yml 指向编排文件路径
lifecycle-management: start-and-stop
此方式会在 Spring Boot 启动时自动执行 docker-compose up,关闭时执行 down 。
注意事项
Windows 路径问题:挂载本地目录(如 - ./data:/data)需确保 WSL2 文件系统权限正确 。
端口冲突:确保宿主机 8080、3306、6379 等端口未被占用。
健康检查:为关键服务(如 MySQL)添加 healthcheck 可避免 Spring Boot 启动过早 。
生产建议:数据库等有状态服务不建议仅用容器部署于生产环境 。
参考资料
Docker Compose 多容器编排入门
Spring Boot 整合 Docker Compose 实战
Microsoft Learn:多容器应用编排