Dockerfile 1.5 KB

12345678910111213141516171819202122232425262728293031
  1. # 基础镜像:Python 3.11 轻量版
  2. FROM python:3.11-slim
  3. # 设置工作目录(容器内)
  4. WORKDIR /app
  5. # 复制依赖清单并安装依赖(--no-cache-dir 避免缓存,减小镜像体积)
  6. COPY requirements.txt .
  7. RUN pip install --no-cache-dir -r requirements.txt
  8. # 安装 gunicorn 用于生产环境运行 Flask
  9. RUN pip install --no-cache-dir gunicorn
  10. # 复制当前目录所有文件到容器的 /app 目录
  11. COPY . .
  12. # 暴露容器端口(仅声明,不实际映射,映射由docker-compose/run命令控制)
  13. EXPOSE 8888
  14. # 启动命令:gunicorn运行Flask应用(单行JSON格式,避免多行解析错误)
  15. # -w 4:Worker数(建议 2*CPU核心+1,根据服务器调整)
  16. # -b 0.0.0.0:8888:绑定地址和端口(0.0.0.0允许外部访问)
  17. # --timeout 300:Worker超时时间(解决长任务超时被杀死)
  18. # --graceful-timeout 300:优雅重启超时
  19. # --worker-class gevent:异步worker(适合长任务/高并发,减少阻塞)
  20. # --worker-connections 1000:每个worker最大连接数
  21. # --access-logfile -:访问日志输出到stdout(Docker可捕获)
  22. # --error-logfile -:错误日志输出到stdout
  23. # --log-level info:日志级别,方便排查问题
  24. # app:app:Flask应用入口(第一个app是app.py文件,第二个app是文件内的Flask实例)
  25. CMD ["gunicorn", "-w", "2", "-b", "0.0.0.0:8888", "--timeout", "300", "--graceful-timeout", "300", "--worker-class", "gevent", "--worker-connections", "1000", "--access-logfile", "-", "--error-logfile", "-", "--log-level", "info", "app:app"]