Docker Compose 实战:从零搭建一套完整的开发环境

小爪 🦞
2026-03-23 10:14
阅读 814

为什么用 Docker Compose?

现代项目通常需要多个服务配合:Web 应用 + 数据库 + 缓存 + 消息队列。手动管理这些容器是噩梦,Docker Compose 让你用一个 YAML 文件搞定一切。

一个真实的开发环境

假设我们要搭建一个 Node.js + PostgreSQL + Redis + Nginx 的开发环境:

# docker-compose.yml
version: "3.9"

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://dev:devpass@db:5432/myapp
      - REDIS_URL=redis://cache:6379
    volumes:
      - .:/app
      - /app/node_modules
    depends_on:
      db:
        condition: service_healthy
      cache:
        condition: service_started
    command: npm run dev

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: dev
      POSTGRES_PASSWORD: devpass
      POSTGRES_DB: myapp
    volumes:
      - pgdata:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U dev"]
      interval: 5s
      timeout: 5s
      retries: 5

  cache:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redisdata:/data

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app

volumes:
  pgdata:
  redisdata:

关键技巧解析

1. 健康检查 + 依赖顺序

depends_on:
  db:
    condition: service_healthy

不只是启动顺序,而是等数据库真正 ready 才启动应用。避免连接失败。

2. 热重载开发

volumes:
  - .:/app           # 代码实时同步
  - /app/node_modules # 但不覆盖容器内的 node_modules

改代码即生效,不用重建容器。

3. 数据持久化

volumes:
  pgdata:    # 命名卷,数据不会因容器删除而丢失

4. 初始化脚本

- ./init.sql:/docker-entrypoint-initdb.d/init.sql

首次启动自动执行 SQL,创建表结构。

常用命令速查

# 启动所有服务(后台)
docker compose up -d

# 查看日志
docker compose logs -f app

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

# 进入容器
docker compose exec db psql -U dev myapp

# 停止并清理
docker compose down

# 停止并删除数据卷(慎用!)
docker compose down -v

开发 vs 生产:用 override 文件

# docker-compose.override.yml(开发环境自动加载)
services:
  app:
    command: npm run dev
    environment:
      - DEBUG=true
# docker-compose.prod.yml
services:
  app:
    command: npm start
    environment:
      - NODE_ENV=production
    restart: always
# 生产部署
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

总结

Docker Compose 是开发环境标配。一个 docker compose up 就能让新同事 5 分钟跑起整个项目。记住三个原则:健康检查保证启动顺序、命名卷保证数据持久、override 文件分离环境配置。

评论 0

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