1742955052

docker-compose.yml

services:
  web:  # 定义 Web 服务 
    image: nginx:latest  # 使用 Nginx 镜像 
    container_name: my_web  # 自定义容器名称 
    ports:
      - "80:80"  # 映射主机端口到容器端口 
    volumes:
      - ./html:/usr/share/nginx/html  # 挂载主机目录到容器 
    environment:  # 设置环境变量 
      - NGINX_HOST=example.com  
    networks:
      - my_network  # 连接到自定义网络 
    depends_on:  # 定义依赖关系 
      - db 
    restart: always  # 设置重启策略 
    logging:  # 配置日志 
      driver: json-file 
      options:
        max-size: "10m"
        max-file: "3"
    healthcheck:  # 定义健康检查 
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s 
      timeout: 10s 
      retries: 3 
    deploy:  # 资源限制(仅适用于 Swarm 模式)
      resources:
        limits:
          cpus: '0.5'
          memory: 512M 
 
  db:  # 定义数据库服务 
    build: # 使用指定目录Dockerfile 
      context: ./xxxx
      dockerfile: Dockerfile
    container_name: my_db  # 自定义容器名称 
    environment:  # 设置环境变量 
      MYSQL_ROOT_PASSWORD: password 
      MYSQL_DATABASE: mydb 
    volumes:
      - db_data:/var/lib/mysql  # 使用命名卷持久化数据 
    networks:
      - my_network  # 连接到自定义网络 
    healthcheck:  # 定义健康检查 
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s 
      timeout: 5s 
      retries: 3 
 
  redis:  # 定义 Redis 服务 
    image: redis:latest  # 使用 Redis 镜像 
    container_name: my_redis  # 自定义容器名称 
    ports:
      - "6379:6379"  # 映射主机端口到容器端口 
    networks:
      - my_network  # 连接到自定义网络 
    restart: unless-stopped  # 设置重启策略 
 
volumes:  # 定义命名卷 
  db_data:
    driver: local 
 
networks:  # 定义自定义网络 
  my_network:
    driver: bridge 

配置项说明

services

  • 定义容器服务,每个服务对应一个容器。
  • 常用配置项:

    • image: 指定使用的镜像。
    • build: 指定使用的Dockerfile文件。
    • container_name: 自定义容器名称。
    • ports: 映射主机端口到容器端口。
    • volumes: 挂载主机目录或命名卷到容器。
    • environment: 设置环境变量。
    • networks: 连接到自定义网络。
    • depends_on: 定义服务启动顺序。
    • restart: 设置重启策略(如 alwayson-failure)。
    • logging: 配置日志驱动和选项。
    • healthcheck: 定义健康检查。
    • deploy: 配置资源限制(仅适用于 Swarm 模式)。

volumes

  • 定义命名卷,用于持久化数据。
  • 示例:

    volumes:
      db_data:
        driver: local 

networks

  • 定义自定义网络,用于服务之间的通信。
  • 示例:

    networks:
      my_network:
        driver: bridge 

restart

  • no

    • 说明:默认值,容器不会自动重启。
    • 适用场景:适用于不需要自动重启的容器。

  • always

    • 说明:无论容器退出状态如何,都会自动重启。
    • 适用场景:适用于必须保持运行的关键服务。

  • on-failure

    • 说明:仅在容器以非零状态退出时重启。
    • 适用场景:适用于需要处理错误并尝试恢复的服务。

  • unless-stopped

    • 说明:容器会自动重启,除非用户手动停止它。
    • 适用场景:适用于需要长期运行但允许手动停止的服务。

选项说明适用场景
no容器不会自动重启不需要自动重启的容器
always无论退出状态如何,都会自动重启必须保持运行的关键服务
on-failure仅在容器以非零状态退出时重启需要处理错误并尝试恢复的服务
unless-stopped自动重启,除非用户手动停止需要长期运行但允许手动停止的服务

healthcheck

  • 监控容器健康状态,确保服务正常运行。
  • 示例:

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s 
      timeout: 10s 
      retries: 3 

deploy

  • 配置资源限制(如 CPU、内存),仅适用于 Swarm 模式。
  • 示例:

    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M