专业服务 · 烟雨平生
Python笔记建站笔记资讯Docker运维
公告烟雨平生 —— 内容持续更新,欢迎指正。
首页 / Python笔记 / 服务器 Docker搭建Flask应用(一) | 烟雨平生

服务器 Docker搭建Flask应用(一) | 烟雨平生

Python笔记 2026年10月02日 14:15 1935 字

Python Hexo Docker Linux 学习空间 i007it.com /2022/05/28/服务器Docker搭….. – 2025-06-06

这条旧摘要像存档里的一枚书签,提醒着当时准备整理的内容:在 Linux 服务器上,用 Docker 搭建一个可运行的 Flask 应用。它和 Hexo 这类静态站不同,Flask 需要常驻进程、依赖运行环境,也更适合放进容器里统一管理。这里沿着旧线索,把基础流程重新梳理一遍。

为什么用 Docker 跑 Flask

Flask 本身轻量,开发时直接 `flask run` 很方便,但放到服务器上就会遇到几个现实问题:Python 版本不一致、依赖装错环境、迁移机器后命令忘记、系统升级影响运行。Docker 的价值在于把应用代码、Python 运行时、依赖包和启动命令封装成镜像,服务器上只需要有 Docker,就能用相近方式运行。

对于个人学习空间或中小型服务,这种隔离方式足够清晰:镜像负责“应用长什么样”,容器负责“应用怎么跑”,宿主机只暴露必要端口。

准备一个最小 Flask 项目

先在服务器上准备目录,结构可以很简单:

“`text

flask_app/

├── app.py

├── requirements.txt

├── Dockerfile

└── .dockerignore

“`

`app.py` 只保留一个入口:

“`python

from flask import Flask

app = Flask(__name__)

app.route(路由装饰器)(“/”)

def index():

return “Hello from Flask in Docker”

“`

`requirements.txt` 写明依赖:

“`text

Flask

gunicorn

“`

开发服务器不适合直接对外,生产环境通常用 Gunicorn 作为 WSGI 服务器,再交给容器启动。

编写 Dockerfile

Dockerfile 的重点是分层缓存和运行边界:

“`dockerfile

FROM python:3-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install –no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8000

CMD [“gunicorn”, “-b”, “0.0.0.0:8000”, “app:app”]

“`

先复制依赖文件再安装,可以在代码变动时复用依赖层。`–no-cache-dir` 能减少镜像体积。Gunicorn 监听 `0.0.0.0`,容器外部才能访问;如果只监听 `127.0.0.1`,端口映射会失效。

构建与启动容器

在项目目录执行构建:

“`bash

docker build -t flask-app .

“`

然后启动:

“`bash

docker run -d –name flask-app -p 8000:8000 flask-app

“`

这里把宿主机端口映射到容器端口。实际使用时,可以按服务器安全组、防火墙和反向代理规划调整。启动后查看日志:

“`bash

docker logs -f flask-app

“`

如果容器反复退出,优先看日志,而不是先改代码。常见原因包括依赖未安装、入口文件路径不对、Gunicorn 模块名写错、端口被占用。

验证与常见排错

在服务器本机测试:

“`bash

curl 127.0.0.1 端口 8000

“`

能返回页面内容,说明 Flask 与 Gunicorn 已在容器内正常工作。若外部无法访问,检查三处:容器是否运行、端口是否映射、服务器防火墙或安全组是否放行。

开发阶段还可以用挂载方式同步代码:

“`bash

docker run -d –name flask-dev -p 8000:8000 -v “$PWD”:/app flask-app

“`

但生产环境不建议直接挂载源码,也不建议用 Flask 自带调试服务器长期对外。

下一步做什么

基础镜像跑通后,接下来可以继续补:用 Nginx 反向代理、配置 HTTPS、通过环境变量区分开发与生产、使用 Docker Compose 管理多容器、把日志和数据目录持久化到宿主机。等这些环节接上,一个 Flask 应用才算从“能跑”走向“可维护”。

这篇作为服务器 Docker 搭建 Flask 应用的第一部分,先把最小闭环走通;后续再围绕部署细节继续展开。