# 多服务编排示例

URL: https://caijiao.org/docker/compose/examples
Source: docs/docker/compose/examples.md
Description: 本章节通过具体示例讲解 Docker Compose 多服务编排方法，包括 Web、数据库和缓存服务的定义、网络配置及数据卷管理，帮助开发者快速搭建完整多容器应用。

Docker Compose 可以同时管理多个服务，实现完整应用环境的快速部署。本节以 Web、数据库和缓存服务为例，演示多服务编排。

## 1. 示例应用架构

- **Web 服务**：使用 Nginx 提供静态页面
- **应用服务**：使用 Node.js 提供 API
- **数据库服务**：MySQL 数据库
- **缓存服务**：Redis

## 2. docker-compose.yml 示例

```yaml
version: "3.9"

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    networks:
      - appnet

  app:
    image: node:20
    working_dir: /app
    volumes:
      - ./app:/app
    command: "node server.js"
    depends_on:
      - db
      - redis
    networks:
      - appnet

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - appnet

  redis:
    image: redis:7
    ports:
      - "6379:6379"
    networks:
      - appnet

networks:
  appnet:

volumes:
  db_data:
````

## 3. 启动与管理

- 启动所有服务：

```bash
docker-compose up -d
```

- 查看日志：

```bash
docker-compose logs -f
```

- 停止并删除容器：

```bash
docker-compose down
```

## 4. 特性说明

- **依赖管理**：`depends_on` 指定服务启动顺序
- **共享网络**：所有服务连接同一网络，容器间可通过服务名通信
- **数据持久化**：数据库使用命名卷存储数据
- **服务隔离**：每个服务运行在独立容器中，便于扩展和维护

---

通过该多服务示例，开发者可以快速理解 Docker Compose 的服务定义、依赖管理、网络配置与数据持久化方式，实现完整多容器应用部署。
