上一篇Docker入门讲了docker run跑单个容器。但实际场景里一个应用往往需要多个容器配合——比如WordPress需要MySQL容器、Nextcloud需要Redis+数据库。Docker Compose就是用一个YAML文件编排多容器协同工作的工具。
Compose文件结构
一个典型的docker-compose.yml:
version: "3"
services:
app:
image: nginx:alpine
ports: ["80:80"]
volumes: ["./html:/usr/share/nginx/html"]
restart: unless-stopped
db:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: rootpass
volumes: ["./db:/var/lib/mysql"]
services定义多个服务(容器),docker compose up -d全部启动,docker compose down全部停止删除。volumes把容器目录挂载到宿主机,数据持久化。
网络和依赖
Compose自动创建内部网络,容器之间用服务名互相访问(比如app容器里ping db就能连到数据库容器)。如果服务有启动顺序要求用depends_on:app容器依赖db先启动。但depends_on仅保证启动顺序,数据库ready还需要额外处理(wait-for-it脚本或healthcheck)。
环境变量管理
用.env文件统一管理敏感配置:
# .env
DB_PASSWORD=你的密码
APP_PORT=8080
# docker-compose.yml中引用
db:
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
常用命令
docker compose up -d启动、docker compose ps查看状态、docker compose logs -f查看日志、docker compose restart重启全部、docker compose pull拉取最新镜像、docker compose exec 服务名 bash进入容器内部。
管理多容器应用,Compose比一行行docker run优雅太多了。我在雨云(rain.jiyueip.com,优惠码admin01)上所有服务都用Compose管理,一个文件夹一个应用,备份就是把文件夹打包。






