跳到主要内容

docker-compose.yml结构

从以下示例文件展开说说 docker-compose.yml 文件的结构

# 指定 Docker Compose 文件版本
version: '3.8'

# 定义服务
services:
# Web 服务
web:
build: . # 使用当前目录下的 Dockerfile 构建镜像
ports:
- "5000:5000" # 将容器端口 5000 映射到主机端口 5000
volumes:
- .:/app # 将当前目录挂载到容器的 /app 目录
environment:
- FLASK_ENV=development # 设置环境变量
depends_on:
- redis # 依赖 redis 服务
networks:
- app_network # 使用自定义网络

# Redis 服务
redis:
image: redis:alpine # 使用官方 Redis 镜像
ports:
- "6379:6379" # 将容器端口 6379 映射到主机端口 6379
volumes:
- redis_data:/data # 使用命名卷持久化 Redis 数据
networks:
- app_network # 使用自定义网络

# 定义网络
networks:
app_network:
driver: bridge # 使用桥接网络驱动

# 定义数据卷
volumes:
redis_data: # 定义名为 redis_data 的数据卷

1. 全局配置

  • version:指定 Docker Compose 文件版本(如 3.8)。
  • services:定义应用中的各个服务。
  • networks:定义自定义网络。
  • volumes:定义数据卷。

2. 服务配置

每个服务可以包含以下参数:

1. build

  • 指定构建镜像的 Dockerfile 路径。
  • 示例:
    build: .
    build:
    context: ./dir
    dockerfile: Dockerfile-alternate

2. image

  • 指定使用的镜像名称。
  • 示例:
    image: nginx:alpine

3. ports

  • 将容器端口映射到主机端口。
  • 示例:
    ports:
    - "80:80"
    - "443:443"

4. volumes

  • 挂载主机目录或数据卷到容器中。
  • 示例:
    volumes:
    - /host/path:/container/path
    - named_volume:/container/path

5. environment

  • 设置环境变量。
  • 示例:
    environment:
    - VAR1=value1
    - VAR2=value2

6. depends_on

  • 定义服务之间的依赖关系。
  • 示例:
    depends_on:
    - db
    - redis

7. networks

  • 指定服务使用的网络。
  • 示例:
    networks:
    - app_network

8. restart

  • 设置容器重启策略。
  • 示例:
    restart: always

9. command

  • 覆盖容器启动时的默认命令。
  • 示例:
    command: python app.py

10. healthcheck

  • 定义健康检查。
  • 示例:
    healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost"]
    interval: 30s
    timeout: 10s
    retries: 3

11. deploy

  • 指定部署配置(仅适用于 Docker Swarm 模式)。
  • 示例:
    deploy:
    replicas: 3
    resources:
    limits:
    cpus: '0.5'
    memory: 512M

3. 网络配置

  • driver:指定网络驱动(如 bridgeoverlay)。
  • ipam:配置 IP 地址管理。
  • 示例:
    networks:
    app_network:
    driver: bridge
    ipam:
    config:
    - subnet: 172.20.0.0/16

4. 数据卷配置

  • driver:指定卷驱动(如 localnfs)。
  • driver_opts:指定驱动选项。
  • 示例:
    volumes:
    named_volume:
    driver: local
    driver_opts:
    type: none
    device: /host/path
    o: bind

5. 完整示例

version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
environment:
- FLASK_ENV=development
depends_on:
- redis
networks:
- app_network

redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
networks:
- app_network

networks:
app_network:
driver: bridge

volumes:
redis_data:

注意

在 YAML 语法中缩进尤为重要!错误缩进会导致 docker-compose up 启动失败!