Docker Compose 使用指南

📌 1. 什么是 Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。
通过一个 compose.yaml(或 docker-compose.yml)文件,你可以:

核心理念:
> 一次定义,到处运行


📌 2. 适合使用 Docker Compose 的场景

✅ 适合: - 本地开发(前端 + 后端 + 数据库) - 微服务本地调试 -
轻量级测试环境 - CI/CD 集成测试

⚠️ 不太适合: - 大规模生产集群(通常用 Kubernetes)


📌 3. Docker Compose 核心概念

🔹 Service(服务)

每个 service 通常对应一个容器(或一组相同的容器)。

🔹 Image vs Build

🔹 Network(网络)

Compose
默认会为所有服务创建一个共享网络,服务之间可以用服务名互相访问。

🔹 Volume(数据卷)

用于数据持久化,例如数据库文件、日志、缓存等。


📌 4. compose.yaml 教学示例

version: "3.9"

services:
  web:
    build: .
    image: express-demo:1.0
    container_name: node-app
    ports:
      - "30080:3000"
    volumes:
      - .:/app
      - node_modules:/app/node_modules
    environment:
      - NODE_ENV=development
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: mysql-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: demo
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:
  node_modules:

📌 5. 常用 Docker Compose 命令速查

启动服务

docker compose up

后台运行:

docker compose up -d

停止服务

docker compose down

查看状态

docker compose ps

查看日志

docker compose logs
docker compose logs -f

重新构建镜像并启动

docker compose up -d --build

进入容器

docker compose exec web sh

📌 6. 网络通信规则

在 Docker Compose 中: - 服务名 = 主机名 - 例如:web 服务可以用
mysql://db:3306 访问数据库


📌 7. Volume(数据持久化)

匿名卷

volumes:
  - /app/node_modules

命名卷(推荐)

volumes:
  - mysql_data:/var/lib/mysql

📌 8. Docker Compose vs Docker

对比 Docker Docker Compose


管理容器 单个 多个
配置方式 CLI YAML
适合场景 简单容器 完整应用栈


📌 9. Docker Compose vs Kubernetes(简要)

对比 Compose Kubernetes


目标 本地开发 生产集群
复杂度 简单 复杂
扩缩容 基本 强大
持久化 Volume PV/PVC


📌 10. 学习建议

  1. 先学 Docker 基础
  2. 掌握 Dockerfile
  3. 学会 Docker Compose
  4. 再进阶 Kubernetes

📌 11. 常见问题(FAQ)

Q:compose.yaml 和 docker-compose.yml 有区别吗?
A:功能相同,新版推荐使用 compose.yaml

Q:改代码后需要重启吗?
A:如果挂载了源码卷(volumes),通常不需要重启。


转载请注明出处