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