真实应用通常由多个服务组成:Web + 数据库 + 缓存。手动用 docker run 逐个启动太麻烦,Docker Compose 用一个 YAML 文件把它们编排起来。
一、安装
dnf install -y docker-compose-plugin # 新版作为 docker 插件
docker compose version
二、编写 docker-compose.yml
以一个 Web + MySQL + Redis 的组合为例:
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- dbdata:/var/lib/mysql
redis:
image: redis
volumes:
dbdata:
三、一键启停
docker compose up -d # 后台启动所有服务
docker compose ps # 查看状态
docker compose logs -f web # 看 web 日志
docker compose down # 停止并删除容器
四、关键概念
- services:定义各个容器
- volumes:持久化数据(数据库数据不能丢)
- depends_on:启动顺序依赖
- ports:端口映射
depends_on 只控制启动顺序,不等服务"就绪"。数据库可能要先于 Web 启动完,需配合健康检查或重试机制。
五、环境隔离
用 .env 文件管理不同环境的配置:
# .env
MYSQL_PASSWORD=production_secret
# docker-compose.yml 中引用
environment:
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
六、小结
Compose 让多容器应用的定义变成代码,可版本化、可复现。开发环境用它最爽,一键拉起完整服务栈。生产环境则可升级到 Kubernetes。