本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

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应用还是新建应用,此镜像都能提供接近最优的性能,且无需牺牲日志等功能,内置“自动调优”机制。
当前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等功能。
高性能WSGI兼容Web服务器,负责处理HTTP请求。
进程管理器,用于管理Meinheld并运行多个进程,提升并发处理能力。
基于Werkzeug、Jinja 2的Python微框架,简洁轻量,适合构建Web应用。
本镜像作为tiangolo/uwsgi-nginx-flask的替代方案,性能约为其400%。基于通用镜像tiangolo/meinheld-gunicorn构建,后者适用于Django等其他WSGI框架。
若您使用Kubernetes或类似工具,可能不需要此镜像(或任何类似基础镜像),建议从零构建Docker镜像。
在Kubernetes、Docker Swarm Mode、Nomad等分布式容器管理系统中,应在集群层面处理副本管理,而非在每个容器中使用进程管理器启动多个工作进程(本镜像的核心功能)。此类场景下,自建镜像并运行单个进程更为合适。
例如,使用Gunicorn时,可创建app/gunicorn_conf.py文件:
# Gunicorn配置变量 loglevel = "info" errorlog = "-" # 标准错误输出 accesslog = "-" # 标准输出 worker_tmp_dir = "/dev/shm" graceful_timeout = 120 timeout = 120 keepalive = 5 threads = 3
对应的Dockerfile:
FROM 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部署时,因难以在保持网络共享和负载均衡的同时管理容器副本,此时单个容器内通过进程管理器启动多个工作进程更为合适。
需在单个容器中收集多进程指标(如Prometheus监控)时,本镜像的多进程模式便于本地工具(如Prometheus exporter)汇总所有内部进程指标并暴露。
更多细节参见FastAPI文档:容器中的FastAPI - Docker。
无需克隆本仓库,可直接将其作为基础镜像。
假设您有requirements.txt,可创建如下Dockerfile:
FROM 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应用变量。
构建镜像:
docker build -t myimage ./
以下环境变量可配置容器行为,均有默认值:
MODULE_NAMEGunicorn导入的Python模块路径。默认:若/app/app/main.py存在则为app.main,否则为main。
示例:
docker run -d -p 80:80 -e MODULE_NAME="custom_app.custom_main" myimage
VARIABLE_NAME模块中WSGI应用变量名。默认:app。
示例(应用变量名为api时):
docker run -d -p 80:80 -e VARIABLE_NAME="api" myimage
APP_MODULE传递给Gunicorn的模块和变量名,默认由MODULE_NAME和VARIABLE_NAME组合(如app.main:app)。
示例:
docker run -d -p 80:80 -e APP_MODULE="custom_app.custom_main:api" myimage
GUNICORN_CONFGunicorn配置文件路径。默认:若/app/gunicorn_conf.py或/app/app/gunicorn_conf.py存在则使用,否则使用/gunicorn_conf.py(内置默认配置)。
示例:
docker run -d -p 80:80 -e GUNICORN_CONF="/app/custom_gunicorn_conf.py" myimage
WORKERS_PER_CORE每CPU核心的工作进程数乘数,默认:2。自动根据服务器CPU核心数计算工作进程数(核心数×此值)。
示例(3倍核心数):
docker run -d -p 80:80 -e WORKERS_PER_CORE="3" myimage
支持浮点值(如8核服务器使用0.5倍,即4个进程):
docker run -d -p 80:80 -e WORKERS_PER_CORE="0.5" myimage
WEB_CONCURRENCY覆盖自动计算的工作进程数,默认:CPU核心数×WORKERS_PER_CORE。
示例(固定2个进程):
docker run -d -p 80:80 -e WEB_CONCURRENCY="2" myimage
HOST容器内Gunicorn监听的IP,默认:0.0.0.0(不建议修改)。
PORT容器监听端口,默认:80。
示例(使用8080端口):
docker run -d -p 80:8080 -e PORT="8080" myimage
BINDGunicorn绑定的地址和端口,默认由HOST和PORT组合(如0.0.0.0:80)。
示例:
docker run -d -p 80:8080 -e BIND="0.0.0.0:8080" myimage
LOG_LEVELGunicorn日志级别,可选:debug、info、warning、error、critical,默认:info。日志输出到容器的stderr和stdout,可通过docker logs -f 容器名查看。
示例(降低日志级别以提升性能):
docker run -d -p 80:80 -e LOG_LEVEL="warning" myimage
镜像内置默认配置文件/gunicorn_conf.py,基于上述环境变量动态配置。可通过以下路径的文件覆盖:
/app/gunicorn_conf.py/app/app/gunicorn_conf.py/gunicorn_conf.py/app/prestart.sh需在启动应用前执行命令时,可在/app目录添加prestart.sh脚本,镜像将自动在启动前运行。
示例(执行Alembic数据库迁移):
#! /usr/bin/env bash # 等待数据库启动 sleep 10; # 执行迁移 alembic upgrade head
执行Python脚本示例:
#! /usr/bin/env bash # 启动前运行自定义Python脚本 python /app/my_custom_prestart_script.py
简而言之:Python项目应优先使用slim版本Docker镜像,而非Alpine。
Alpine适用于通过多阶段构建生成静态二进制文件的语言(如Go),但Python扩展依赖标准构建工具,Alpine通常缺乏预编译包(wheel),需安装大量工具手动构建依赖,导致镜像体积与Debian-based镜像相当甚至更大,且构建时间更长、资源消耗更高。若需精简镜像,建议使用基于Debian的slim版本。
所有镜像标签、配置、环境变量和应用选项均经过测试验证。
issue-manager.yml。PR #154 by @tiangolo。latest-changes GitHub Action。PR #153 by @tiangolo。免费版仅支持 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 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429