docker-compose.yml 语法
Docker Compose 通过 YAML 文件定义多容器应用,下面介绍其语法结构。
基本结构
YAML
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
volumes:
db-data:
networks:
app-network:
顶级配置项:
version(版本)、services(服务)、volumes(命名卷)、networks(网络)。
services 配置
核心字段
YAML
services:
web:
image: nginx:latest # 镜像
build: . # 或从 Dockerfile 构建
container_name: my-nginx # 容器名称
ports:
- "80:80" # 端口映射
volumes:
- ./html:/usr/share/nginx/html # 挂载
- nginx-data:/data # 命名卷
environment: # 环境变量
- NODE_ENV=production
- DB_HOST=db
env_file:
- .env # 从文件加载
depends_on: # 依赖关系
- db
networks: # 网络
- app-network
restart: unless-stopped # 重启策略
镜像与构建
YAML
# 使用已有镜像
services:
web:
image: nginx:latest
# 从 Dockerfile 构建
services:
app:
build:
context: .
dockerfile: Dockerfile.prod
args:
NODE_ENV: production
# 简写
services:
app:
build: .
端口映射
YAML
ports:
- "80:80" # 宿主机:容器
- "8080:80" # 不同端口
- "127.0.0.1:80:80" # 绑定 IP
- "8000-8010:80-90" # 端口范围
数据卷挂载
YAML
volumes:
# 绑定挂载
- ./html:/usr/share/nginx/html
- ./conf:/etc/nginx/conf.d:ro # 只读
# 命名卷
- nginx-data:/data
# 临时文件系统
- type: tmpfs
target: /tmp
tmpfs:
size: 104857600 # 100MB
volumes 配置
YAML
volumes:
db-data:
redis-data:
# 指定驱动
cache-data:
driver: local
driver_opts:
type: tmpfs
device: tmpfs
networks 配置
YAML
networks:
frontend:
backend:
# 自定义驱动
overlay-net:
driver: overlay
YAML
services:
web:
networks:
- frontend
- backend
db:
networks:
- backend # 仅在 backend 网络
完整示例
YAML
version: '3.8'
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- app
networks:
- frontend
restart: unless-stopped
app:
build: .
environment:
- DATABASE_URL=postgres://db:5432/myapp
- REDIS_URL=redis://redis:6379
depends_on:
- db
- redis
networks:
- frontend
- backend
db:
image: postgres:15
volumes:
- db-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: postgres123
networks:
- backend
redis:
image: redis:7-alpine
networks:
- backend
volumes:
db-data:
networks:
frontend:
backend:
常用命令
Bash
# 启动所有服务
docker compose up -d
# 启动指定服务
docker compose up -d nginx app
# 查看日志
docker compose logs -f
# 停止所有服务
docker compose down
# 停止并删除数据卷
docker compose down -v
# 重建并启动
docker compose up -d --build
要点总结
- Compose 文件包含 services、volumes、networks 三大顶级配置
- services 定义每个容器:image/build、ports、volumes、environment、depends_on
- depends_on 声明服务依赖,但不保证下游服务已就绪(需配合 healthcheck)
- networks 实现服务隔离,只有同一网络的服务才能互相访问
docker compose up -d启动,docker compose down停止
📝 发现内容有误?点击此处直接编辑