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 文件。

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝