为什么开发用 Docker Compose
Docker Compose 让每个开发者(和 CI)使用相同的数据库版本、Redis 配置和环境变量,不再有“在我机器上能跑”的问题。
完整的 docker-compose.yml
services:
app:
build:
context: .
target: development
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://dev:devpass@postgres:5432/myapp
REDIS_URL: redis://redis:6379
NODE_ENV: development
volumes:
- .:/app
- /app/node_modules
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: dev
POSTGRES_PASSWORD: devpass
POSTGRES_DB: myapp
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dev -d myapp"]
interval: 2s
retries: 20
redis:
image: redis:7-alpine
volumes:
pgdata:
热重载与数据
把源码目录挂载进容器并保留 node_modules 匿名卷,避免宿主依赖覆盖容器依赖。命名卷让数据库在 down 后保留,down -v 可重置。
验证环境
预期结果:docker compose up 后应用可在 3000 端口访问,健康检查通过,修改源码触发重载。执行 docker compose down -v 再启动,验证冷启动也能成功。