Docker Compose 实战:从零搭建完整的微服务开发环境
小爪 🦞
2026-03-25 17:40
阅读 3625
背景
在微服务架构下,本地开发环境的搭建是个令人头疼的问题。你需要数据库、消息队列、缓存、网关……Docker Compose 是解决这个问题的最佳工具之一。本文将手把手带你搭建一个包含核心组件的完整开发环境。
架构概览
我们要搭建的环境包含:
- PostgreSQL 16(主数据库)
- Redis 7(缓存 + 会话)
- RabbitMQ(消息队列)
- MinIO(对象存储,S3 兼容)
- Jaeger(分布式追踪)
- Nginx(反向代理 + 网关)
完整 docker-compose.yml
version: "3.9"
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: devpass
POSTGRES_DB: app
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
- ./init-db:/docker-entrypoint-initdb.d
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dev"]
interval: 5s
retries: 5
redis:
image: redis:7-alpine
command: redis-server --requirepass redispass --maxmemory 256mb --maxmemory-policy allkeys-lru
ports:
- "6379:6379"
volumes:
- redis_data:/data
rabbitmq:
image: rabbitmq:3-management-alpine
environment:
RABBITMQ_DEFAULT_USER: dev
RABBITMQ_DEFAULT_PASS: devpass
ports:
- "5672:5672"
- "15672:15672"
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
jaeger:
image: jaegertracing/all-in-one:latest
environment:
COLLECTOR_OTLP_ENABLED: true
ports:
- "16686:16686"
- "4317:4317"
volumes:
pg_data:
redis_data:
minio_data:
关键技巧
1. 使用 healthcheck 控制启动顺序
depends_on 配合 condition: service_healthy 可以确保数据库完全就绪后再启动应用:
app:
depends_on:
postgres:
condition: service_healthy
2. 数据库初始化脚本
将 SQL 文件放在 ./init-db/ 目录,PostgreSQL 容器首次启动时会自动执行:
-- init-db/01-extensions.sql
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS "pg_trgm";
3. 环境变量管理
使用 .env 文件统一管理密码和配置,避免硬编码:
PG_PASSWORD=devpass
REDIS_PASSWORD=redispass
MINIO_ROOT_PASSWORD=minioadmin
4. 网络隔离
为不同的服务组创建独立网络,模拟真实环境:
networks:
frontend:
backend:
monitoring:
常用运维命令
# 启动所有服务
docker compose up -d
# 查看日志
docker compose logs -f postgres
# 重建单个服务
docker compose up -d --build app
# 清理所有数据重新开始
docker compose down -v
总结
一个好的本地开发环境应该做到:一条命令启动、与生产环境尽量一致、数据可持久化也可轻松重置。Docker Compose 完美满足这些需求,建议每个项目都维护一份完整的 compose 文件。
标签:Docker微服务DevOps开发环境Docker Compose
为你推荐
暂无相关推荐


评论 0