📅 2026-10-22 💼 云原生/DevOps ⏱️ 阅读约10分钟
💥 微服务项目,本地开发环境搭建是个大坑。Spring Boot、MySQL、Redis、RabbitMQ、Nginx、Eureka……6个服务,手动一个个启动,光配置就要半小时。
💥 更崩溃的是:新人入职,环境搭一天;换台电脑,环境重新搭;团队协作,每个人环境不一样,出问题互相甩锅。
💥 今天教大家用Docker Compose一键编排6个微服务,一个YAML文件搞定所有配置,一条命令启动全部服务。从此告别"在我电脑上能跑啊"的尴尬!
🐳 Docker Compose是什么?30秒搞懂
Docker Compose是Docker官方提供的容器编排工具,通过一个YAML文件定义多个容器的配置,一条命令启动所有服务。
核心概念:
• Service(服务):一个容器实例,比如MySQL、Redis、你的Spring Boot应用• Container(容器):服务运行后的实例,互相隔离• Network(网络):容器之间的通信通道,同一个网络下的容器可以互相访问• Volume(数据卷):持久化存储,容器重启后数据不丢失
💡 安装方式
Docker Desktop(Windows/Mac)自带Docker Compose,不用单独安装。Linux服务器:sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
📋 完整配置:6个微服务一键编排
下面是完整的docker-compose.yml配置文件,包含Spring Boot + MySQL + Redis + RabbitMQ + Nginx + Eureka 6个服务:
version: '3.8'services:# 1. MySQL数据库mysql:image: mysql:8.0container_name: my-mysqlenvironment:MYSQL_ROOT_PASSWORD: root123MYSQL_DATABASE: mydbports: -"3306:3306"volumes: - mysql-data:/var/lib/mysqlnetworks: - mynet# 2. Redis缓存redis:image: redis:7-alpinecontainer_name: my-redisports: -"6379:6379"command: redis-server --requirepass redis123networks: - mynet# 3. RabbitMQ消息队列rabbitmq:image: rabbitmq:3-managementcontainer_name: my-rabbitmqenvironment:RABBITMQ_DEFAULT_USER: adminRABBITMQ_DEFAULT_PASS: admin123ports: -"5672:5672"# AMQP端口 -"15672:15672"# 管理界面端口networks: - mynet# 4. Eureka服务注册中心eureka:build: ./eureka-servercontainer_name: my-eurekaports: -"8761:8761"networks: - mynet# 5. Spring Boot业务服务app:build: ./my-appcontainer_name: my-appdepends_on: - mysql - redis - rabbitmq - eurekaenvironment:SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydbSPRING_REDIS_HOST: redisSPRING_RABBITMQ_HOST: rabbitmqEUREKA_CLIENT_SERVICEURL_DEFAULTZONE: http://eureka:8761/eureka/ports: -"8080:8080"networks: - mynet# 6. Nginx反向代理nginx:image: nginx:alpinecontainer_name: my-nginxports: -"80:80"volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.confdepends_on: - appnetworks: - mynetvolumes:mysql-data:networks:mynet:driver: bridge
🚀 一键启动:3条命令搞定
配置写好后,启动所有服务只需要3条命令:
# 1. 构建镜像(首次或代码更新后执行)$ docker-composebuild# 2. 启动所有服务(后台运行)$ docker-composeup -d# 3. 查看运行状态$ docker-composepsNAME STATUS PORTSmy-mysql Up 2 minutes 0.0.0.0:3306->3306/tcpmy-redis Up 2 minutes 0.0.0.0:6379->6379/tcpmy-rabbitmq Up 2 minutes 0.0.0.0:5672->5672/tcp, 0.0.0.0:15672->15672/tcpmy-eureka Up 2 minutes 0.0.0.0:8761->8761/tcpmy-app Up 2 minutes 0.0.0.0:8080->8080/tcpmy-nginx Up 2 minutes 0.0.0.0:80->80/tcp
全部启动后,访问 http://localhost:8761 查看Eureka控制台,访问 http://localhost:15672 查看RabbitMQ管理界面,访问 http://localhost 通过Nginx访问业务接口。
🔧 常用命令速查
⚙️ 关键配置解析
docker-compose.yml中有几个关键配置需要重点理解:
1. depends_on:服务依赖顺序app服务依赖mysql、redis、rabbitmq、eureka,Docker Compose会先启动这4个服务,再启动app。但注意:depends_on只保证容器启动顺序,不保证服务就绪。如果app启动时mysql还没完全就绪,需要在app里加重试逻辑。
2. networks:容器网络所有服务都在mynet网络下,容器之间可以用服务名互相访问。比如app连接MySQL的地址是 jdbc:mysql://mysql:3306,不是localhost,也不是IP地址。
3. volumes:数据持久化MySQL数据存储在mysql-data卷中,即使容器删除重建,数据也不会丢失。Nginx配置文件通过volumes挂载,修改配置后重启容器即可生效,不用重新构建镜像。
4. environment:环境变量Spring Boot的配置通过环境变量注入,不用改代码、不用改配置文件。不同环境(开发/测试/生产)只需要修改docker-compose.yml中的环境变量即可。
🎯 实战技巧:新人入职5分钟搭好环境
把docker-compose.yml和相关的Dockerfile、配置文件统一放在项目根目录下,新人入职只需要:
💡 操作步骤
1. 安装Docker Desktop(Windows/Mac)或Docker Engine(Linux)2. git clone 项目代码3. 进入项目根目录,执行 docker-compose up -d4. 等待所有服务启动完成,访问 http://localhost:8761 确认Eureka正常5. 开始开发!
整个过程不超过5分钟,不用装MySQL、不用装Redis、不用配置环境变量,所有依赖都在容器里。换电脑?重装系统?只要有Docker,环境随时恢复。
🎯 使用建议与避坑指南
1️⃣ 开发环境用Compose,生产环境用K8s
Docker Compose适合单机部署,开发、测试、演示环境用起来很方便。生产环境需要高可用、自动扩缩容、服务发现,建议用Kubernetes(K8s)。
2️⃣ 注意容器资源限制
默认情况下,Docker容器可以使用宿主机的所有资源。建议在docker-compose.yml中给每个服务配置CPU和内存限制,避免某个服务把机器资源吃光,影响其他服务。
3️⃣ 日志管理不能忽视
容器日志默认会无限增长,建议配置日志轮转(log-opt max-size=10m, max-file=3),定期清理旧日志,避免磁盘被撑爆。
💬 互动话题
你平时开发环境是怎么搭建的?用Docker Compose还是手动安装?有什么踩坑经验?
👉 欢迎在评论区分享你的看法!
觉得有用?别忘了「三连」支持!
❤️ 点赞——给辛苦码字的作者加鸡腿!⭐ 收藏——搭环境的时候用得着!🔄 转发——让团队小伙伴都学会!
关注我,获取更多Java后端干货
专注Java后端技术 · 分享实战干货 · 每周更新点击关注不迷路
🏷️ 相关标签:#Docker #DockerCompose #微服务 #容器编排 #云原生
评论 (0)