# Compose 入门（docker-compose.yml）

URL: https://caijiao.org/docker/compose/intro
Source: docs/docker/compose/intro.md
Description: 本章节介绍 Docker Compose 的基本概念和 docker-compose.yml 配置方法，包括服务定义、网络、卷和环境变量，帮助开发者快速管理多容器应用。

Docker Compose 是用于定义和管理多容器 Docker 应用的工具，通过 `docker-compose.yml` 文件描述服务、网络和卷。

## 1. Docker Compose 基本概念

- **服务（Service）**：容器的抽象，可以定义镜像、命令、端口、卷等
- **网络（Network）**：服务间通信网络
- **卷（Volume）**：持久化存储
- **环境变量（Environment Variables）**：配置服务行为

## 2. docker-compose.yml 基本结构

```yaml
version: "3.9"

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    networks:
      - mynet

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - mynet

networks:
  mynet:

volumes:
  db_data:
````

## 3. 常用指令

- 启动服务：

```bash
docker-compose up -d
```

- 停止服务：

```bash
docker-compose down
```

- 查看服务日志：

```bash
docker-compose logs -f
```

- 构建或重建服务：

```bash
docker-compose build
```

## 4. 多容器依赖管理

- Compose 会按照 `depends_on` 定义启动顺序：

```yaml
services:
  web:
    image: myweb
    depends_on:
      - db
```

## 5. 环境变量与配置管理

- 使用 `.env` 文件定义环境变量：

```txt
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=mydb
```

- Compose 文件中引用：

```yaml
environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  MYSQL_DATABASE: ${MYSQL_DATABASE}
```

---

掌握 Docker Compose 和 docker-compose.yml 配置，可以轻松管理多容器应用，实现服务快速启动、依赖管理和数据持久化。
