meinheld-gunicorn-flask Docker 镜像下载 - 轩辕镜像
meinheld-gunicorn-flask 镜像详细信息和使用指南
meinheld-gunicorn-flask 镜像标签列表和版本信息
meinheld-gunicorn-flask 镜像拉取命令和加速下载
meinheld-gunicorn-flask 镜像使用说明和配置指南
Docker 镜像加速服务 - 轩辕镜像平台
国内开发者首选的 Docker 镜像加速平台
极速拉取 Docker 镜像服务
相关 Docker 镜像推荐
热门 Docker 镜像下载
meinheld-gunicorn-flask 镜像详细信息
meinheld-gunicorn-flask 镜像标签列表
meinheld-gunicorn-flask 镜像使用说明
meinheld-gunicorn-flask 镜像拉取命令
Docker 镜像加速服务
轩辕镜像平台优势
镜像下载指南
相关 Docker 镜像推荐
meinheld-gunicorn-flask 镜像详细说明
meinheld-gunicorn-flask 使用指南
meinheld-gunicorn-flask 配置说明
meinheld-gunicorn-flask 官方文档
meinheld-gunicorn-flask
Docker镜像,集成Meinheld(由Gunicorn管理),为基于Flask的Python Web应用提供高性能运行环境,支持自动性能调优。
GitHub仓库:[]
Docker Hub镜像:[]
支持的标签及对应Dockerfile链接
python3.9,latest(Dockerfile)
废弃标签
🚨 以下标签不再支持或维护,已从GitHub仓库移除,但最后推送的版本可能仍在Docker Hub中(如果有用户拉取过):
python3.9-alpine3.13python3.8python3.8-alpine3.11python3.7python3.7-alpine3.8python3.6python3.6-alpine3.8python2.7
这些版本的最后日期标签为:
python3.9-alpine3.13-2024-03-11python3.8-2024-10-28python3.8-alpine3.11-2024-03-11python3.7-2024-10-28python3.7-alpine3.8-2024-03-11python3.6-2022-11-25python3.6-alpine3.8-2022-11-25python2.7-2022-11-25
注意:存在每个构建日期的标签。若需固定Docker镜像版本,可选择此类标签,例如tiangolo/meinheld-gunicorn-flask:python3.9-2024-11-02。
概述
运行在Meinheld(由Gunicorn管理)上的Python Flask Web应用具有Flask可实现的最佳性能之一。无论您是已有Flask应用还是新建应用,此镜像都能提供接近最优的性能,且无需牺牲日志等功能,内置“自动调优”机制。
Python 3.10和3.11注意事项
当前Meinheld的最新版本为1.0.2(2020年5月17日发布),依赖旧版本Greenlet(>=0.4.5,<0.5),与Python 3.10和3.11不兼容。因此,本镜像支持的最新Python版本为3.9。
* 关于性能和特性的说明
若您正在启动新项目,建议考虑更新、更快的框架(如基于ASGI的FastAPI,而非Flask和Django使用的WSGI),搭配镜像tiangolo/uvicorn-gunicorn-fastapi,性能约为本镜像的200%。此外,ASGI框架原生支持异步代码,更易实现WebSocket等功能。
技术细节
Meinheld
高性能WSGI兼容Web服务器,负责处理HTTP请求。
Gunicorn
进程管理器,用于管理Meinheld并运行多个进程,提升并发处理能力。
Flask
基于Werkzeug、Jinja 2的Python微框架,简洁轻量,适合构建Web应用。
替代方案
本镜像作为tiangolo/uwsgi-nginx-flask的替代方案,性能约为其400%。基于通用镜像tiangolo/meinheld-gunicorn构建,后者适用于Django等其他WSGI框架。
🚨 警告:您可能不需要此Docker镜像
若您使用Kubernetes或类似工具,可能不需要此镜像(或任何类似基础镜像),建议从零构建Docker镜像。
在Kubernetes、Docker Swarm Mode、Nomad等分布式容器管理系统中,应在集群层面处理副本管理,而非在每个容器中使用进程管理器启动多个工作进程(本镜像的核心功能)。此类场景下,自建镜像并运行单个进程更为合适。
例如,使用Gunicorn时,可创建app/gunicorn_conf.py文件:
python# Gunicorn配置变量 loglevel = "info" errorlog = "-" # 标准错误输出 accesslog = "-" # 标准输出 worker_tmp_dir = "/dev/shm" graceful_timeout = 120 timeout = 120 keepalive = 5 threads = 3
对应的Dockerfile:
dockerfileFROM python:3.9 WORKDIR /code COPY ./requirements.txt /code/requirements.txt RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt COPY ./app /code/app CMD ["gunicorn", "--conf", "app/gunicorn_conf.py", "--bind", "0.0.0.0:80", "app.main:app"]
更多信息参见FastAPI文档:容器中的FastAPI - Docker,相关概念适用于其他Web应用。
使用场景
简单应用
若应用足够简单,无需精细调整进程数,且运行在单服务器(非集群),可使用本镜像的自动默认配置。
Docker Compose
在单服务器(非集群)上通过Docker Compose部署时,因难以在保持网络共享和负载均衡的同时管理容器副本,此时单个容器内通过进程管理器启动多个工作进程更为合适。
Prometheus及其他场景
需在单个容器中收集多进程指标(如Prometheus监控)时,本镜像的多进程模式便于本地工具(如Prometheus exporter)汇总所有内部进程指标并暴露。
更多细节参见FastAPI文档:容器中的FastAPI - Docker。
使用方法
无需克隆本仓库,可直接将其作为基础镜像。
假设您有requirements.txt,可创建如下Dockerfile:
dockerfileFROM tiangolo/meinheld-gunicorn-flask:python3.9 COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt COPY ./app /app
镜像默认读取/app/app/main.py或/app/main.py,并加载其中名为app的WSGI应用变量。
构建镜像:
bashdocker build -t myimage ./
环境变量
以下环境变量可配置容器行为,均有默认值:
MODULE_NAME
Gunicorn导入的Python模块路径。默认:若/app/app/main.py存在则为app.main,否则为main。
示例:
bashdocker run -d -p 80:80 -e MODULE_NAME="custom_app.custom_main" myimage
VARIABLE_NAME
模块中WSGI应用变量名。默认:app。
示例(应用变量名为api时):
bashdocker run -d -p 80:80 -e VARIABLE_NAME="api" myimage
APP_MODULE
传递给Gunicorn的模块和变量名,默认由MODULE_NAME和VARIABLE_NAME组合(如app.main:app)。
示例:
bashdocker run -d -p 80:80 -e APP_MODULE="custom_app.custom_main:api" myimage
GUNICORN_CONF
Gunicorn配置文件路径。默认:若/app/gunicorn_conf.py或/app/app/gunicorn_conf.py存在则使用,否则使用/gunicorn_conf.py(内置默认配置)。
示例:
bashdocker run -d -p 80:80 -e GUNICORN_CONF="/app/custom_gunicorn_conf.py" myimage
WORKERS_PER_CORE
每CPU核心的工作进程数乘数,默认:2。自动根据服务器CPU核心数计算工作进程数(核心数×此值)。
示例(3倍核心数):
bashdocker run -d -p 80:80 -e WORKERS_PER_CORE="3" myimage
支持浮点值(如8核服务器使用0.5倍,即4个进程):
bashdocker run -d -p 80:80 -e WORKERS_PER_CORE="0.5" myimage
WEB_CONCURRENCY
覆盖自动计算的工作进程数,默认:CPU核心数×WORKERS_PER_CORE。
示例(固定2个进程):
bashdocker run -d -p 80:80 -e WEB_CONCURRENCY="2" myimage
HOST
容器内Gunicorn监听的IP,默认:0.0.0.0(不建议修改)。
PORT
容器监听端口,默认:80。
示例(使用8080端口):
bashdocker run -d -p 80:8080 -e PORT="8080" myimage
BIND
Gunicorn绑定的地址和端口,默认由HOST和PORT组合(如0.0.0.0:80)。
示例:
bashdocker run -d -p 80:8080 -e BIND="0.0.0.0:8080" myimage
LOG_LEVEL
Gunicorn日志级别,可选:debug、info、warning、error、critical,默认:info。日志输出到容器的stderr和stdout,可通过docker logs -f 容器名查看。
示例(降低日志级别以提升性能):
bashdocker run -d -p 80:80 -e LOG_LEVEL="warning" myimage
自定义Gunicorn配置文件
镜像内置默认配置文件/gunicorn_conf.py,基于上述环境变量动态配置。可通过以下路径的文件覆盖:
/app/gunicorn_conf.py/app/app/gunicorn_conf.py/gunicorn_conf.py
自定义/app/prestart.sh
需在启动应用前执行命令时,可在/app目录添加prestart.sh脚本,镜像将自动在启动前运行。
示例(执行Alembic数据库迁移):
bash#! /usr/bin/env bash # 等待数据库启动 sleep 10; # 执行迁移 alembic upgrade head
执行Python脚本示例:
bash#! /usr/bin/env bash # 启动前运行自定义Python脚本 python /app/my_custom_prestart_script.py
Alpine Python警告
简而言之:Python项目应优先使用slim版本Docker镜像,而非Alpine。
Alpine适用于通过多阶段构建生成静态二进制文件的语言(如Go),但Python扩展依赖标准构建工具,Alpine通常缺乏预编译包(wheel),需安装大量工具手动构建依赖,导致镜像体积与Debian-based镜像相当甚至更大,且构建时间更长、资源消耗更高。若需精简镜像,建议使用基于Debian的slim版本。
测试
所有镜像标签、配置、环境变量和应用选项均经过测试验证。
发布说明
最新变更
升级
- ⬆ 将flask从3.1.0升级到3.1.1。PR #169 by [@dependabot[bot]]([***]
- ⬆ 将flask从3.0.3升级到3.1.0。PR #167 by [@dependabot[bot]]([***]
- ⬆ 将flask从2.2.5升级到3.0.3。PR #147 by [@dependabot[bot]]([***]
- 🔥 移除对Python 3.7和3.8的支持。PR #164 by @tiangolo。
- ⬆ 将gunicorn从22.0.0升级到23.0.0。PR #152 by [@dependabot[bot]]([***]
- ⬆ 将gunicorn从20.1.0升级到22.0.0。PR #149 by [@dependabot[bot]]([***]
内部优化
- ⬆ 将tiangolo/latest-changes从0.3.1升级到0.3.2。PR #166 by [@dependabot[bot]]([***]
- 🔥 移除旧无用文件。PR #165 by @tiangolo。
- ⬆ 将tiangolo/issue-manager从0.5.0升级到0.5.1。PR #163 by [@dependabot[bot]]([***]
- ⬆ 将docker/build-push-action从5升级到6。PR #150 by [@dependabot[bot]]([***]
- 👷 更新
issue-manager.yml。PR #154 by @tiangolo。 - 👷 更新
latest-changesGitHub Action。PR #153 by @tiangolo。 - 👷 更新issue-manager.yml GitHub Action权限。PR #151 by @tiangolo。
- Bump gunicorn from 20.1.0 to 22.0.0 in /docker-images. PR #148 by [@dependabot[bot]]([***]
- ⬆ 将docker/build-push-action从2升级到5。PR [#144]([***]
用户好评
来自真实用户的反馈,见证轩辕镜像的优质服务
常见问题
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
轩辕镜像下载加速使用手册
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
登录仓库拉取
通过 Docker 登录认证访问私有仓库
Linux
在 Linux 系统配置镜像加速服务
Windows/Mac
在 Docker Desktop 配置镜像加速
Docker Compose
Docker Compose 项目配置加速
K8s Containerd
Kubernetes 集群配置 Containerd
宝塔面板
在宝塔面板一键配置镜像加速
群晖
Synology 群晖 NAS 配置加速
飞牛
飞牛 fnOS 系统配置镜像加速
极空间
极空间 NAS 系统配置加速服务
爱快路由
爱快 iKuai 路由系统配置加速
绿联
绿联 NAS 系统配置镜像加速
威联通
QNAP 威联通 NAS 配置加速
Podman
Podman 容器引擎配置加速
Singularity/Apptainer
HPC 科学计算容器配置加速
其他仓库配置
ghcr、Quay、nvcr 等镜像仓库
专属域名拉取
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429