2026年1月24日

鼓捣docker compose yml文件

# 指定 Docker Compose 文件的版本,3.8 是一个稳定且功能完善的版本

version: '3.8'

# 定义所有的服务

services:

  # 定义名为 web 的服务(应用主服务)

  web:

    # 根据当前目录(.)下的 Dockerfile 构建镜像

    build: .

    # 端口映射:将主机的 8000 端口映射到容器内的 8000 端口

    ports:

      - "8000:8000"

    # 数据卷挂载(目录映射)

    volumes:

      # 将主机当前目录挂载到容器内的 /app 目录(代码热更新)

      - .:/app

      # 将名为 static_volume 的数据卷挂载到容器内的 /app/static 目录(保存静态文件)

      - static_volume:/app/static

    # 设置环境变量:开启 DEBUG 模式

    environment:

      - DEBUG=True

    # 从 .env 文件中加载额外的环境变量(优先级高于上面的 environment)

    env_file:

      - .env

    # 依赖关系:web 服务必须在 db 和 redis 服务启动后才启动

    depends_on:

      - db

      - redis

  # 定义名为 db 的服务(MySQL 数据库)

  db:

    # 使用官方的 mysql:8.0 镜像

    image: mysql:8.0

    # MySQL 环境变量配置

    environment:

      # 设置 MySQL root 用户的密码

      MYSQL_ROOT_PASSWORD: rootpass

      # 自动创建名为 app_db 的数据库

      MYSQL_DATABASE: app_db

    # 数据卷挂载:将 mysql_data 卷挂载到容器的 MySQL 数据目录

    volumes:

      - mysql_data:/var/lib/mysql

    # 健康检查:确保 MySQL 服务正常运行后才对外提供服务

    healthcheck:

      # 执行 mysqladmin ping 命令检查服务状态

      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]

      # 检查间隔:每 5 秒检查一次

      interval: 5s

      # 超时时间:3 秒内无响应则判定为失败

      timeout: 3s

      # 重试次数:最多重试 5 次,失败则判定服务不健康

      retries: 5

  # 定义名为 redis 的服务(Redis 缓存)

  redis:

    # 使用轻量的 redis:alpine 镜像(基于 Alpine Linux)

    image: redis:alpine

    # 数据卷挂载:将 redis_data 卷挂载到容器的 Redis 数据目录

    volumes:

      - redis_data:/data

    # 启动命令:启动 Redis 服务并设置密码为 yourpassword

    command: redis-server --requirepass yourpassword

# 定义所有需要持久化的卷(Volume)

volumes:

  # 存储应用静态文件的卷

  static_volume:

  # 存储 MySQL 数据的卷

  mysql_data:

  # 存储 Redis 数据的卷

  redis_data: