核心是三步:写好应用和依赖、构建镜像、运行容器;生产环境推荐用gunicorn替代flask run,并通过多阶段dockerfile构建精简镜像,最后用docker run -d -p 5000:5000启动容器。

直接用 Docker 部署 Flask 应用,核心是三步:写好应用和依赖、构建镜像、运行容器。生产环境推荐加 Nginx 做反向代理和静态文件服务,但单容器快速验证可先跳过。
一、准备项目基础文件
确保项目目录下有这几个关键文件:
-
app.py:主程序,监听
0.0.0.0:5000(不能只写127.0.0.1,否则容器内无法被外部访问) -
requirements.txt:明确列出依赖,例如:
Flask==2.3.3
gunicorn==21.2.0
生产必须用gunicorn替代flask run,后者仅适合开发 - Dockerfile:定义镜像构建逻辑(见下一步)
-
.dockerignore(可选但推荐):排除
__pycache__、.git、venv等非必要文件,减小镜像体积和构建时间
二、编写生产级 Dockerfile
用多阶段构建减少最终镜像大小,兼顾安全与效率:
# 构建阶段:安装依赖 FROM python:3.12-slim AS builder WORKDIR /app COPY requirements.txt . RUN pip wheel --no-cache-dir --no-deps --wheel-dir /wheels -r requirements.txt <h1>运行阶段:精简镜像</h1><p>FROM python:3.12-slim WORKDIR /app COPY --from=builder /wheels /wheels COPY --from=builder /usr/local/bin/ /usr/local/bin/ RUN pip install --no-cache-dir /wheels/*.whl COPY . . EXPOSE 5000 CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "2", "app:app"] </p>
说明:
– 使用 slim 镜像避免完整 Debian 的冗余;
– wheel 方式安装比直接 pip install -r 更可控、可复现;
– 不复制源码到构建阶段,只复制 requirements.txt,提升缓存命中率。
三、构建并运行容器
在项目根目录执行:
- 构建镜像:
docker build -t my-flask-app:latest . - 运行容器(映射端口 + 后台运行):
docker run -d -p 5000:5000 --name flask-prod my-flask-app:latest - 验证是否启动成功:
docker logs flask-prod查看输出;浏览器访问http://localhost:5000应返回响应
四、进阶:Docker Compose + Nginx(推荐生产)
若需静态资源托管、HTTPS 终止或负载均衡,引入 Nginx 反向代理:
- 新建
nginx.conf,配置location /代理到http://flask-app:5000,location /static指向本地./static - 写
docker-compose.yml,定义flask-app和nginx两个服务,共用自定义网络,Nginx 挂载配置和静态目录 - 一键启动:
docker-compose up -d,访问http://localhost即可
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











