Docker Compose 是基于 Docker 的多容器应用编排工具,可以用一个 YAML 文件定义多个服务,实现“一键启动整套系统”。
本文将系统讲解 Docker Compose 的使用方法,包括:安装、语法、核心命令、实战案例和生产建议。
一、Docker Compose 是什么?
Docker Compose 的作用是:
用一个文件管理多个容器服务
例如一个网站系统通常包含:
- Web 服务(Nginx / Node.js)
- 数据库(MySQL / PostgreSQL)
- 缓存(Redis)
使用 Compose 后,只需:
docker compose up -d
即可全部启动。
二、安装 Docker Compose
1. 检查是否已安装(新版 Docker 自带)
docker compose version
如果有版本号,说明已经安装 ✔
2. 安装方式(Ubuntu)
sudo apt update
sudo apt install docker-compose-plugin -y
3. 验证安装
docker compose version
三、Docker Compose 核心文件(docker-compose.yml)
Compose 的核心是:
docker-compose.yml
1. 基本结构
version: "3.9"
services:
app:
image: nginx
ports:
- "8080:80"
2. 关键字段说明
| 字段 | 作用 |
|---|---|
| services | 定义服务 |
| image | 使用的镜像 |
| build | 本地构建 |
| ports | 端口映射 |
| volumes | 挂载目录 |
| environment | 环境变量 |
| depends_on | 依赖关系 |
四、Docker Compose 常用命令
1. 启动服务
docker compose up -d
2. 停止服务
docker compose down
3. 查看运行状态
docker compose ps
4. 查看日志
docker compose logs -f
5. 重启服务
docker compose restart
6. 重新构建
docker compose up -d --build
五、实战案例:Nginx + MySQL + Web
1. 项目结构
project/
├── docker-compose.yml
├── html/
└── mysql/
2. 完整配置
version: "3.9"
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: appdb
ports:
- "3306:3306"
volumes:
- ./mysql:/var/lib/mysql
3. 启动系统
docker compose up -d
4. 访问结果
- Web:http://localhost
- MySQL:localhost:3306
六、进阶用法
1. 使用环境变量文件
创建:
.env
内容:
MYSQL_ROOT_PASSWORD=root123
引用:
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
2. 构建自定义镜像
services:
app:
build: .
3. 多容器依赖控制
depends_on:
- db
注意:只控制启动顺序,不保证“服务已就绪”
4. 重启策略
restart: always
常用:
- no
- always
- on-failure
- unless-stopped
七、生产环境最佳实践
1. 推荐目录结构
app/
├── docker-compose.yml
├── .env
├── services/
└── data/
2. 使用固定版本镜像
❌ 不推荐:
image: nginx:latest
✔ 推荐:
image: nginx:1.25
3. 数据持久化必须做
volumes:
- ./data:/var/lib/mysql
4. 使用独立网络
networks:
app-net:
八、常见问题(FAQ)
1. docker compose not found
解决:
sudo apt install docker-compose-plugin
2. 容器启动失败
检查日志:
docker compose logs
3. 端口冲突
修改:
ports:
- "8081:80"
4. 数据丢失
原因:没有挂载 volumes
九、Docker Compose 官方资料
- 官网文档:Docker Compose Docs
- Compose 文件规范:Compose Specification
- Docker 官网:Docker
十、总结
Docker Compose 的核心价值:
用一个 YAML 文件管理整个系统的生命周期
你只需要记住三件事:
- docker compose up -d(启动)
- docker compose down(停止)
- docker compose logs(排错)