全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

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 停止

📝 发现内容有误?点击此处直接编辑

← 上一篇 Compose 网络与卷
下一篇 → 多容器编排启动
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库