# 指定 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:
莫非你玩的也是 nas 设备? 越来越高级了哈,我都有点跟不上了。