Docker Compose 编排 Spring Boot 开发所需的多个容器

3 阅读3分钟

在 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:多容器应用编排