← 返回首页

Docker Compose多容器编排实战

前言

Docker Compose是管理多容器应用的利器。本文通过实际项目演示Compose的使用方法。

一、典型Web应用架构

一个典型的Web应用包含:前端、API后端、数据库、缓存,用Compose可以一键启动所有服务。

二、完整示例

version: '3.8'

services:
  # API后端
  api:
    build: ./api
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_USER=app
      - DB_PASS=secret123
      - REDIS_HOST=redis
    depends_on:
      mysql:
        condition: service_healthy
      redis:
        condition: service_started
    restart: unless-stopped

  # MySQL数据库
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: myapp
      MYSQL_USER: app
      MYSQL_PASSWORD: secret123
    volumes:
      - mysql_data:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

  # Redis缓存
  redis:
    image: redis:7-alpine
    command: redis-server --requirepass redispass
    volumes:
      - redis_data:/data

  # Nginx反向代理
  nginx:
    image: nginx:1.25-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./ssl:/etc/nginx/ssl
    depends_on:
      - api

volumes:
  mysql_data:
  redis_data:

三、常用命令

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

# 查看状态
docker compose ps

# 查看日志
docker compose logs -f api

# 重新构建
docker compose build api

# 停止并删除
docker compose down

# 仅重启某个服务
docker compose restart api

# 扩容
docker compose up -d --scale api=3

四、环境变量管理

# .env 文件
DB_PASSWORD=secret123
REDIS_PASSWORD=redispass
API_PORT=3000

# docker-compose.yml 中引用
services:
  api:
    environment:
      - DB_PASSWORD=${DB_PASSWORD}
      - REDIS_PASSWORD=${REDIS_PASSWORD}

五、网络配置

Compose默认创建一个专用网络,所有服务可通过服务名互相访问:

# 在API容器中可直接用服务名访问
mysql -h mysql -u app -p
redis-cli -h redis -a redispass

六、数据持久化

使用named volumes确保数据不丢失:

  • 数据库数据:挂载到named volume
  • 配置文件:使用bind mount
  • 上传文件:挂载到共享volume
Docker Compose适合单机部署。如果需要多节点编排和自动伸缩,建议使用Kubernetes。