Docker Compose 是 Docker 提供的一个用于 多容器应用部署与管理的编排工具。通过一个 docker-compose.yml 文件,你可以轻松地定义与启动一个复杂的应用程序,包括数据库、后端、前端、缓存等多个服务。
本文将从原理、优势、核心概念、常用指令、示例、最佳实践几个方面进行讲解,帮助你快速掌握 Docker Compose。
一、Docker Compose 是什么?
在部署应用时,你可能需要:
- 一个 Nginx 容器做反代
- 一个 Node.js 容器跑后端
- 一个 MySQL 容器存数据库
- 一个 Redis 容器做缓存
如果你用普通的 docker 命令:每个容器都要手动 docker run,配置环境变量、网络、端口映射非常麻烦。
Docker Compose 的作用就是:
用一个 YAML 文件统一定义所有服务,并通过一条命令完成启动、停止、更新、日志查看等操作。
二、Docker Compose 的核心优势
1. 用一个文件定义整个应用
所有服务配置集中在 docker-compose.yml 文件中,一目了然。
2. 一条命令启动所有容器
docker compose up -d
3. 自动创建隔离网络
服务之间可以直接用服务名通信,例如:
backend连接mysql:3306php连接redis:6379
无需手写 IP。
4. 环境变量管理方便
支持 .env 文件,不用把密码写硬编码在 yml 中。
5. 适合开发、测试、个人部署
Compose 更适合本地或单机环境。多机部署则需要 Swarm 或 Kubernetes。
三、docker-compose.yml 文件结构
一个典型 Compose 文件如下:
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- backend
backend:
build: ./app
environment:
- DB_HOST=mysql
- DB_USER=root
depends_on:
- mysql
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
解释
services::定义多个容器服务。web、backend、mysql:每一个都是一个独立容器。volumes::声明持久化存储卷。depends_on::定义启动顺序。
四、Docker Compose 常用命令
启动服务
docker compose up
后台运行:
docker compose up -d
停止服务
docker compose down
查看日志
docker compose logs -f
重启/更新容器
docker compose restart
构建服务(当 Dockerfile 有改动)
docker compose build
五、Compose 示例:部署一个完整博客系统(Nginx + PHP + MySQL)
version: "3.9"
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./html:/var/www/html
depends_on:
- php
php:
image: php:8-fpm
volumes:
- ./html:/var/www/html
depends_on:
- mysql
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
运行:
docker compose up -d
你就拥有一个可运行的博客环境了。
六、最佳实践
1. 使用 .env 文件管理环境变量
.env 内容:
MYSQL_ROOT_PASSWORD=123456
然后在 yml 中使用:
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
2. 尽量使用 volume 持久化数据
否则你重建容器时数据库会丢失。
3. 使用 build + Dockerfile 为后端构建镜像
这样更新代码更方便。
4. 用 depends_on 控制启动顺序
防止数据库未启动就访问。
七、Compose 适合什么场景?
| 场景 | 是否适合 | 原因 |
|---|---|---|
| 本地开发 | ✔️ | 快速部署一套环境 |
| 个人 VPS | ✔️ | 单机使用最合适 |
| 小规模私有服务 | ✔️ | 维护简单 |
| 企业级高可用集群 | ❌ | 需要 K8S / Swarm |
| 多服务器负载均衡 | ❌ | Compose 不支持分布式 |
八、总结
Docker Compose 是:
- 单机上管理多容器应用的最佳工具
- 使用简单、结构清晰
- 非常适合开发者、个人云服务、小型运维场景
你只需要一个 docker-compose.yml 文件,就能把复杂的架构简化为“一条命令启动”。
评论(没有评论)