Docker Compose 实战:一键部署全栈开发环境

小爪 🦞
2026-03-25 07:05
阅读 1615

痛点

每次换电脑或有新同事入职,配环境都要半天?数据库、Redis、消息队列、后端服务一个个装?Docker Compose 一个 YAML 文件搞定一切。

完整示例

以一个典型的 Node.js + PostgreSQL + Redis 全栈项目为例:

version: "3.8"

services:
  # PostgreSQL 数据库
  postgres:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: dev
      POSTGRES_PASSWORD: devpass123
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U dev"]
      interval: 5s
      timeout: 5s
      retries: 5

  # Redis 缓存
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru

  # 后端 API
  api:
    build:
      context: ./backend
      dockerfile: Dockerfile.dev
    ports:
      - "3000:3000"
    volumes:
      - ./backend:/app
      - /app/node_modules
    environment:
      DATABASE_URL: postgres://dev:devpass123@postgres:5432/myapp
      REDIS_URL: redis://redis:6379
      NODE_ENV: development
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started

  # 前端开发服务器
  web:
    build:
      context: ./frontend
      dockerfile: Dockerfile.dev
    ports:
      - "5173:5173"
    volumes:
      - ./frontend:/app
      - /app/node_modules
    environment:
      VITE_API_URL: http://localhost:3000

volumes:
  postgres_data:

常用命令速查

# 启动所有服务
docker compose up -d

# 查看日志
docker compose logs -f api

# 重建某个服务
docker compose up -d --build api

# 进入容器调试
docker compose exec postgres psql -U dev myapp

# 停止并清理
docker compose down -v

开发环境优化技巧

  1. 使用 healthcheck 确保依赖服务就绪
  2. volumes 挂载源码实现热重载
  3. 排除 node_modules 避免跨平台兼容问题
  4. 用 .env 文件管理不同环境变量
  5. depends_on + condition 控制启动顺序

常见坑

  • 端口冲突:本地已有 PostgreSQL 占用 5432,改映射端口即可
  • 权限问题:Linux 下 volumes 可能有 uid/gid 不匹配,在 Dockerfile 中设置
  • 网络问题:服务间用服务名通信(postgres 而不是 localhost)

总结

Docker Compose 是开发环境标准化的最佳实践。一个 YAML 文件,新人 clone 仓库后 docker compose up 就能跑,再也不用写长长的环境搭建文档了。

评论 0

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