Compose 文件与服务定义
约 650 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Docker › Docker Compose(在新窗口打开) › Compose 文件与服务定义
Docker Compose 用于定义和运行多容器 Docker 应用。通过一个 compose.yml 文件,可以用一条命令启动整个应用栈。
最小示例
# compose.yml
services:
web:
image: nginx:alpine
ports:
- "8080:80"docker compose up -d
curl http://localhost:8080
docker compose downCompose 文件结构
services: # 定义多个服务(容器)
web:
image: nginx:alpine
# ... 服务配置
volumes: # 定义卷(可在服务中引用)
data:
driver: local
networks: # 定义网络(可在服务中引用)
app-net:
driver: bridge服务配置项
services:
web:
image: nginx:alpine # 使用已有镜像
build: . # 从 Dockerfile 构建
build:
context: .
dockerfile: Dockerfile.prod
args:
VERSION: "1.0"
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
- data:/app/data # 引用 volumes 中定义的命名卷
environment:
- NODE_ENV=production
- DB_HOST=mysql
env_file:
- ./config/app.env
depends_on:
- mysql
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 3s
retries: 3
networks:
- app-net
command: ["nginx", "-g", "daemon off;"]Web + MySQL 示例
services:
web:
build: .
ports:
- "3000:3000"
environment:
DB_HOST: mysql
DB_USER: root
DB_PASSWORD: secret
depends_on:
mysql:
condition: service_healthy
networks:
- app-net
mysql:
image: mysql:8.4
volumes:
- mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: app
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
networks:
- app-net
volumes:
mysql-data:
networks:
app-net:# 启动
docker compose up -d
# 查看状态
docker compose ps
# 查看日志
docker compose logs -f
# 停止
docker compose down
# 停止并删除卷(谨慎)
docker compose down -vdepends_on 详解
services:
web:
depends_on:
- db # 仅等待 db 容器启动,不保证 db 就绪
db:
depends_on:
redis:
condition: service_started
mysql:
condition: service_healthy # 等待健康检查通过| 条件 | 含义 |
|---|---|
service_started(默认) | 仅等待容器启动 |
service_healthy | 等待健康检查通过 |
service_completed_successfully | 等待 run 类型任务完成 |
.env 文件
# .env 文件(与 compose.yml 同目录)
DB_HOST=mysql
DB_PORT=3306
DB_NAME=app# compose.yml 中引用
services:
web:
environment:
- DB_HOST=${DB_HOST}
- DB_PORT=${DB_PORT}常用命令
docker compose up -d # 启动所有服务(后台)
docker compose down # 停止并移除所有服务
docker compose ps # 查看服务状态
docker compose logs -f # 实时日志
docker compose logs web # 查看特定服务日志
docker compose exec web sh # 进入服务容器
docker compose restart web # 重启服务
docker compose build # 重新构建镜像
docker compose pull # 拉取最新镜像
docker compose top # 查看进程小结
- Compose 用 YAML 文件定义多容器应用,
docker compose up -d一键启动。 - 主要配置项:
image/build、ports、volumes、environment、depends_on。 depends_on控制启动顺序,condition: service_healthy等待健康检查通过。.env文件管理环境变量,与 compose.yml 分离。- 同一 compose 项目的服务默认在同一网络中,可通过服务名互相访问。
上一节:自定义网络与 DNS 下一节:Compose 常用命令
