Files
DjangoAdmin_Flask_EleVue/docker/docker-compose.yml
T
2026-09-12 19:51:59 +08:00

169 lines
8.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
version: '3.7'
# ============================================================================
# Docker Compose 配置文件 - Flask 后端服务
# ============================================================================
# 项目名称:flask_elevue
# 功能描述:Flask 应用服务容器化部署配置
# 维护团队:后端架构组
# 最后更新:2026-07-23
# 环境类型:开发/测试/生产(通过环境变量区分)
# ============================================================================
# 应用服务
services:
# 后端服务
flask_elevue:
# ------------------------------------------------------------------------
# 镜像与构建配置
# ------------------------------------------------------------------------
# 镜像名称(命名规范:项目名/服务名,建议使用私有仓库地址)
image: flask_elevue
# 容器实例名称(用于 docker ps 和日志过滤)
container_name: flask_elevue
# 镜像构建配置(当镜像不存在时自动构建)
build:
context: ../ # 构建上下文路径(项目根目录,Dockerfile 在 docker/ 下)
dockerfile: docker/Dockerfile # Dockerfile 文件名
#build: . # 旧版构建语法(已注释,保留兼容)
# ------------------------------------------------------------------------
# 安全与权限配置
# ------------------------------------------------------------------------
# 【安全警告】privileged: true 授予容器所有宿主机权限
# 风险等级:高危(容器逃逸风险)
# 建议:生产环境必须改为 false,并使用 cap_add 精确授权
# 已加固:privileged 高危,改为 false
privileged: false
# 容器内运行的用户(安全最佳实践)
# 当前使用 root(不推荐),建议在 Dockerfile 中创建专用用户
# 已加固:使用 Dockerfile 中创建的非特权用户
user: flask_user
# ------------------------------------------------------------------------
# 服务高可用配置
# ------------------------------------------------------------------------
# 重启策略:always(始终重启,保证服务连续性)
# 其他可选值:no | on-failure[:max-retries] | unless-stopped
# 生产环境建议:unless-stopped(除非手动停止,否则自动重启)
restart: always
# ------------------------------------------------------------------------
# 网络配置
# ------------------------------------------------------------------------
# 网络模式:host(容器直接使用宿主机网络栈)
# 优点:网络性能高,无 NAT 开销
# 缺点:网络隔离性差,端口冲突风险,不适用于多容器编排
# 已加固:改用默认 bridge 网络(配合 ports 映射)
# 端口映射(仅在非 host 网络模式下生效)
# 格式:宿主机端口:容器端口
# 注意:host 模式下此配置无效,保留是为了模式切换时生效
ports:
- 8023:8023
# ------------------------------------------------------------------------
# 存储配置(数据持久化)
# ------------------------------------------------------------------------
# 文件挂载(宿主机路径:容器路径:权限)
# 用途:持久化上传文件,避免容器重建时数据丢失
# 权限:rw(读写),ro(只读)
volumes:
- ./uploads:/data/apps/uploads # 上传文件目录(读写挂载)
# ========================================================================
# 资源限制配置(企业级标准)- 保障宿主机稳定性
# ========================================================================
# 说明:限制容器可使用的 CPU 和内存资源,防止资源耗尽导致系统崩溃
# 适用范围:docker-compose up(单机)和 Docker Swarm(集群)均生效
# 配置策略:根据应用实际负载和宿主机资源配置
# ========================================================================
deploy:
resources:
# --------------------------------------------------------------------
# 硬限制(上限)- 容器绝对不能超过的资源量
# --------------------------------------------------------------------
limits:
cpus: '2.0' # CPU 上限:最多使用 2 个物理核心
# 说明:'2.0' 表示 2 个核心,'0.5' 表示半个核心
# 建议值:宿主机总核心数 * 0.7~0.8(预留系统资源)
memory: 2G # 内存上限:最多使用 2GB
# 说明:单位支持 b/k/m/g(小写)或 B/K/M/G(大写)
# 建议值:应用峰值内存 * 1.2~1.5(留出缓冲空间)
# 注意:内存超限时容器会被 OOM Killer 终止
# --------------------------------------------------------------------
# 软限制(预留)- 保证容器最少能获得的资源量
# --------------------------------------------------------------------
reservations:
cpus: '0.5' # CPU 保证下限:至少保留 0.5 个核心
# 说明:调度器会优先保证此资源量
# 建议值:限制值的 20%~30%
memory: 512M # 内存保证下限:至少保留 512MB
# 说明:确保容器在资源竞争时仍能获得最低内存
# 建议值:限制值的 25%~40%
# 【备选方案】如果使用旧版 Compose 格式(v2),可用以下替代语法:
# cpus: 2.0 # CPU 限制(已废弃,不推荐)
# mem_limit: 2G # 内存限制(已废弃,不推荐)
# mem_reservation: 512M # 内存预留(已废弃,不推荐)
# ========================================================================
# ------------------------------------------------------------------------
# 启动命令配置
# ------------------------------------------------------------------------
# 执行命令(覆盖 Dockerfile 中的 CMD)
# 生产环境启动:使用 Gunicorn + Gevent
command: gunicorn -c gunicorn.conf.py src.wsgi:app
# ------------------------------------------------------------------------
# 日志配置(集中式日志管理)
# ------------------------------------------------------------------------
logging:
driver: "json-file" # 日志驱动:JSON 文件格式(Docker 默认)
# 其他驱动选项:fluentd(日志聚合)、syslog(系统日志)、none(禁用)
options:
max-size: "500m" # 单个日志文件最大大小(达到后自动轮转)
# 说明:防止日志文件无限增长占满磁盘
# 建议值:根据日志量设置 100m~1g
max-file: "10" # 保留的日志文件数量(轮转保留数)
# 说明:保留最近 10 个轮转文件,旧文件自动删除
# 建议值:5~20 个,根据磁盘空间和保留周期决定
# ============================================================================
# 附录:运维操作指南
# ============================================================================
# 1. 启动服务(后台运行):
# docker-compose up -d
#
# 2. 查看服务日志:
# docker-compose logs -f flask_elevue
#
# 3. 停止服务:
# docker-compose down
#
# 4. 重新构建并启动(应用代码更新后):
# docker-compose up -d --build
#
# 5. 进入容器调试:
# docker exec -it flask_elevue /bin/bash
#
# 6. 查看资源使用情况:
# docker stats flask_elevue
#
# 7. 查看容器详细配置(含资源限制):
# docker inspect flask_elevue | grep -A 20 "Resources"
#
# ============================================================================
# 安全加固建议(企业级 Checklist)
# ============================================================================
# □ privileged: true → 改为 false,使用 cap_add 精确授权
# □ user: root → 改为非特权用户(如 flask_user)
# □ 敏感信息(密码/密钥)使用环境变量或 Docker Secrets,禁止硬编码
# □ 添加健康检查(healthcheck),配合负载均衡和自动恢复
# □ 日志驱动建议使用 fluentd 或 syslog 集中收集
# □ 定期更新基础镜像(python:3.x-slim 或 alpine)修复安全漏洞
# □ 使用镜像扫描工具(Trivy/Clair)检测漏洞
# □ 资源限制值根据实际压测结果动态调整
# ============================================================================