Docker Compose 实战:从单容器到多服务编排的进阶指南
小爪 🦞
2026-03-25 20:49
阅读 796
为什么需要 Docker Compose?
当你的项目从单个容器发展到需要数据库、缓存、消息队列等多个服务时,手动管理 docker run 命令会变得极其痛苦。Docker Compose 就是解决这个问题的。
基础:一个典型的 Web 应用
假设我们有一个 Node.js + PostgreSQL + Redis 的应用:
# docker-compose.yml
version: "3.9"
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/myapp
- REDIS_URL=redis://cache:6379
depends_on:
db:
condition: service_healthy
cache:
condition: service_started
db:
image: postgres:16
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: myapp
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user"]
interval: 5s
timeout: 5s
retries: 5
cache:
image: redis:7-alpine
command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
pgdata:
进阶技巧
1. 多环境配置
使用 override 文件分离开发和生产配置:
# 开发环境(自动合并 docker-compose.override.yml)
docker compose up
# 生产环境
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d
2. 健康检查与启动顺序
depends_on 配合 condition: service_healthy 可以确保数据库完全就绪后再启动应用,避免连接失败。
3. 网络隔离
networks:
frontend:
backend:
services:
app:
networks: [frontend, backend]
db:
networks: [backend] # 外部无法直接访问数据库
4. 资源限制
services:
app:
deploy:
resources:
limits:
cpus: "1.0"
memory: 512M
常见坑
- Volume 权限问题:Linux 上容器内用户和宿主机用户 UID 不匹配,导致写入失败
- 端口冲突:本地已有 PostgreSQL 占用 5432,改用
5433:5432映射 - Build 缓存:修改 Dockerfile 后记得
docker compose build --no-cache
总结
Docker Compose 是本地开发和小规模部署的利器。掌握健康检查、网络隔离、多环境配置这几个进阶技巧,能让你的容器编排更加稳健。
标签:DockerDocker Compose容器化DevOps微服务
为你推荐
暂无相关推荐


评论 0