# Docker Compose配置文件,版本为3(指定Compose语法版本) version: '3' # 定义所有服务(容器) services: # 1. MySQL数据库服务(存储应用数据) db: image: mysql:latest # 使用最新版MySQL镜像 restart: always # 容器退出后自动重启(确保服务持续运行) environment: # 环境变量配置(数据库初始化参数) - MYSQL_DATABASE=djangoblog # 自动创建的数据库名称 - MYSQL_ROOT_PASSWORD=DjAnGoBlOg!2!Q@W#E # MySQL root用户密码 ports: # 端口映射:主机3306端口 → 容器3306端口(MySQL默认端口) - 3306:3306 volumes: # 数据卷挂载:持久化MySQL数据 - ./bin/datas/mysql/:/var/lib/mysql # 主机目录 → 容器内MySQL数据存储目录 depends_on: # 服务依赖:启动db前先启动redis(可能用于数据库缓存等场景) - redis container_name: db # 容器名称固定为"db" # 2. Django博客应用服务(核心应用) djangoblog: build: # 构建配置 context: ../../ # 指定Dockerfile所在的上下文目录(上级目录的上级目录) restart: always # 容器退出后自动重启 command: bash -c 'sh /code/djangoblog/bin/docker_start.sh' # 启动命令:执行应用启动脚本 ports: # 端口映射:主机8000端口 → 容器8000端口(Django应用端口) - "8000:8000" volumes: # 数据卷挂载:持久化应用数据和配置 - ./collectedstatic:/code/djangoblog/collectedstatic # 静态资源目录(供Nginx访问) - ./logs:/code/djangoblog/logs # 应用日志目录 - ./uploads:/code/djangoblog/uploads # 用户上传文件目录(如图片) environment: # 环境变量配置(应用连接参数) - DJANGO_MYSQL_DATABASE=djangoblog # 数据库名称(与db服务对应) - DJANGO_MYSQL_USER=root # 数据库用户名 - DJANGO_MYSQL_PASSWORD=DjAnGoBlOg!2!Q@W#E # 数据库密码(与db服务对应) - DJANGO_MYSQL_HOST=db # 数据库服务地址(指向同网络内的"db"服务) - DJANGO_MYSQL_PORT=3306 # 数据库端口 - DJANGO_REDIS_URL=redis:6379 # Redis服务地址(指向同网络内的"redis"服务) links: # 显式链接到其他服务(用于容器间通信) - db # 链接到MySQL服务 - redis # 链接到Redis服务 depends_on: # 服务依赖:启动djangoblog前先启动db服务(确保数据库就绪) - db container_name: djangoblog # 容器名称固定为"djangoblog" # 3. Nginx服务(反向代理和静态资源服务) nginx: restart: always # 容器退出后自动重启 image: nginx:latest # 使用最新版Nginx镜像 ports: # 端口映射:HTTP(80)和HTTPS(443)端口 - "80:80" - "443:443" volumes: # 数据卷挂载:Nginx配置和静态资源 - ./bin/nginx.conf:/etc/nginx/nginx.conf # 主机Nginx配置文件 → 容器内Nginx配置文件 - ./collectedstatic:/code/djangoblog/collectedstatic # 静态资源目录(与djangoblog服务共享) links: # 链接到djangoblog服务,实现反向代理 - djangoblog:djangoblog # 将djangoblog服务映射为"djangoblog"主机名 container_name: nginx # 容器名称固定为"nginx" # 4. Redis服务(缓存服务,用于提升应用性能) redis: restart: always # 容器退出后自动重启 image: redis:latest # 使用最新版Redis镜像 container_name: redis # 容器名称固定为"redis" ports: # 端口映射:主机6379端口 → 容器6379端口(Redis默认端口) - "6379:6379"