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

此Docker镜像现已弃用。无需使用它,你可以直接使用带有--workers选项的Uvicorn。✨
下文将提供更多相关信息。
python3.10, (Dockerfile)python3.9, (Dockerfile)python3.11-slim (Dockerfile)python3.10-slim (Dockerfile)python3.9-slim (Dockerfile)🚨 以下标签不再受支持或维护,已从GitHub仓库中移除,但最后推送的版本可能仍在Docker Hub上可用(如果有人拉取过):
python-3.8python-3.8-slimpython3.8-alpine3.10python3.9-alpine3.14python3.7python3.7-alpine3.8python3.6python3.6-alpine3.8这些版本的最后日期标签如下:
python-3.8-2024-11-02python-3.8-slim-2024-11-02python3.8-alpine3.10-2024-03-17python3.9-alpine3.14-2024-03-17python3.7-2024-11-02python3.7-alpine3.8-2024-03-17python3.6-2022-11-25python3.6-alpine3.8-2022-11-25注意:存在每个构建日期的标签。如果你需要"固定"所使用的Docker镜像版本,可以选择其中一个标签。例如tiangolo/uvicorn-gunicorn-starlette:python3.11-2024-11-02。
Docker镜像,包含由Gunicorn管理的Uvicorn,用于Python 中的高性能Starlette Web应用,并具备性能自动调优功能。
GitHub仓库:[***]
Docker Hub镜像:[***]
Starlette 已被证明是一款性能卓越的Python Web框架,第三方基准测试也证实了这一点。
其可实现的性能与Go和Node.js框架相当,在许多情况下甚至更优。
此镜像包含自动调优机制,可根据可用CPU核心数启动一定数量的工作进程。这样你只需添加代码即可自动获得高性能,这在简单部署中非常有用。
你可能正在使用Kubernetes或类似工具。在这种情况下,你可能不需要此镜像(或任何其他类似基础镜像)。你可能最好按照FastAPI in Containers - Docker: Build a Docker Image for FastAPI文档中的说明从头构建Docker镜像,相同的流程也适用于Starlette。
如果你有一个使用Kubernetes、Docker Swarm Mode、Nomad或其他类似复杂系统的机器集群,用于管理多台机器上的分布式容器,那么你可能希望在集群级别处理复制,而不是在每个容器中使用进程管理器(如带有Uvicorn工作进程的Gunicorn),这正是此Docker镜像所做的。
在这些情况下(例如使用Kubernetes),你可能希望从头构建Docker镜像,安装依赖项,并运行单个Uvicorn进程,而不是使用此镜像。
例如,你的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 ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
你可以在FastAPI文档:FastAPI in Containers - Docker中了解更多相关内容,这些思路同样适用于Starlette。
如果你确实希望在单个容器中拥有多个工作进程,Uvicorn现在支持处理子进程,包括重启已终止的进程。因此,不需要Gunicorn在单个容器中管理多个工作进程。
你可以修改上面的示例Dockerfile,为Uvicorn添加--workers选项,如下所示:
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 ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80", "--workers", "4"]
这就是你所需要的。你根本不需要此Docker镜像。😅
你可以在FastAPI文档:Deployment with Docker中了解更多信息。
Uvicorn过去不支持管理工作进程(包括重启已终止的工作进程),但现在支持了。
在此之前,可以使用Gunicorn作为进程管理器,运行Uvicorn工作进程。这增加了复杂度,而现在已不再必要。
本文档的其余部分为历史原因保留,但你可能不需要它。😅
tiangolo/uvicorn-gunicorn-starlette此镜像将根据其运行的服务器(可用CPU核心数)设置合理的配置,而不会做出妥协。
它具有合理的默认值,但你可以使用环境变量进行配置或覆盖配置文件。
还有一个精简版本(slim)。如果你需要,可以使用上面列出的标签之一。
tiangolo/uvicorn-gunicorn此镜像(tiangolo/uvicorn-gunicorn-starlette)基于tiangolo/uvicorn-gunicorn。
该镜像实际上完成了所有工作。
此镜像仅安装Starlette,并提供专门针对Starlette的文档。
如果你对Uvicorn、Gunicorn和ASGI有足够的了解,可以直接使用该镜像。
tiangolo/uvicorn-gunicorn-fastapi有一个 sibling Docker镜像:tiangolo/uvicorn-gunicorn-fastapi
如果你正在创建新的FastAPI Web应用,你应该使用tiangolo/uvicorn-gunicorn-fastapi。
注意:FastAPI基于Starlette,并在其之上添加了多个功能。适用于API和其他场景:数据验证、数据转换、OpenAPI文档、依赖注入、安全/身份验证等。
你不需要克隆GitHub仓库。
你可以将此镜像用作其他镜像的基础镜像。
假设你有一个requirements.txt文件,你可以有如下Dockerfile:
FROM tiangolo/uvicorn-gunicorn-starlette:python3.11 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的变量,该变量指向你的Starlette应用。
然后你可以从包含Dockerfile的目录构建镜像,例如:
docker build -t myimage ./
Dockerfile,内容如下:FROM tiangolo/uvicorn-gunicorn-starlette:python3.11 COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt COPY ./app /app
app目录并进入。main.py文件,内容如下:from starlette.applications import Starlette from starlette.responses import JSONResponse app = Starlette() @app.route("/") async def homepage(request): return JSONResponse({"message": "Hello World!"})
. ├── app │ └── main.py └── Dockerfile
Dockerfile的项目目录(其中包含你的app目录)。docker build -t myimage .
docker run -d --name mycontainer -p 80:80 myimage
现在你在Docker容器中拥有了一个优化的Starlette服务器。它会根据当前服务器(和CPU核心数)自动调优。
你应该能够在Docker容器的URL中访问它,例如:[] 或 []
你将看到类似如下内容:
{"message": "Hello World!"}
你可能还需要添加应用的任何依赖项,并将它们固定到特定版本,可能包括Uvicorn、Gunicorn和Starlette。
这样你可以确保应用始终按预期工作。
你可以在Dockerfile中使用pip命令安装包,使用requirements.txt,甚至使用Poetry。
然后你可以以受控方式升级这些依赖项,运行测试,确保一切正常,而不会在某些新版本不兼容时破坏生产应用。
以下是一种安装依赖项的方法示例,确保每个包都有固定版本。
假设你有一个使用Poetry管理的项目,因此你在pyproject.toml文件中拥有包依赖项,可能还有poetry.lock文件。
然后你可以使用Docker多阶段构建创建Dockerfile:
FROM python:3.9 as requirements-stage WORKDIR /tmp RUN pip install poetry COPY ./pyproject.toml ./poetry.lock* /tmp/ RUN poetry export -f requirements.txt --output requirements.txt --without-hashes FROM tiangolo/uvicorn-gunicorn-starlette:python3.11 COPY --from=requirements-stage /tmp/requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt COPY ./app /app
这将:
./poetry.lock*(以*结尾),所以如果该文件尚不可用,也不会崩溃。重要的是在安装依赖项之后复制应用代码,这样你可以利用Docker的缓存。这样,每次更新应用文件时,不必从头安装所有依赖项,只在添加新依赖项时才需要。
这也适用于任何其他安装依赖项的方式。如果你使用requirements.txt,请单独复制它并在Dockerfile顶部安装所有依赖项,然后在之后添加应用代码。
以下是可在容器中设置以进行配置的环境变量及其默认值:
MODULE_NAMEGunicorn要导入的Python"模块"(文件),该模块应在变量中包含实际应用。
默认值:
/app/app/main.py文件,则为app.main/app/main.py文件,则为main例如,如果你的主文件位于/app/custom_app/custom_main.py,你可以设置:
docker run -d -p 80:80 -e MODULE_NAME="custom_app.custom_main" myimage
VARIABLE_NAMEPython模块中包含Starlette应用的变量。
默认值:app
例如,如果你的主Python文件包含如下内容:
from starlette.applications import Starlette from starlette.responses import JSONResponse api = Starlette() @api.route("/") async def homepage(request): return JSONResponse({"message": "Hello World!"})
在这种情况下,api是包含Starlette应用的变量。你可以设置:
docker run -d -p 80:80 -e VARIABLE_NAME="api" myimage
APP_MODULE传递给Gunicorn的包含Python模块和变量名的字符串。
默认值:基于MODULE_NAME和VARIABLE_NAME变量设置,例如app.main:app或main:app
你可以设置:
docker run -d -p 80:80 -e APP_MODULE="custom_app.custom_main:api" myimage
GUNICORN_CONFGunicorn Python配置文件的路径。
默认值:
/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核心数,并基于此值启动一定数量的工作进程。
默认值:1
你可以设置:
docker run -d -p 80:80 -e WORKERS_PER_CORE="3" myimage
如果在具有2个CPU核心的服务器上使用值3,将运行6个工作进程。
你也可以使用浮点值。
例如,如果你有一台大型服务器(假设有8个CPU核心)运行多个应用,而你有一个Starlette应用已知不需要高性能,并且不想浪费服务器资源。你可以将其设置为每个CPU核心使用0.5个工作进程。例如:
docker run -d -p 80:80 -e WORKERS_PER_CORE="0.5" myimage
在具有8个CPU核心的服务器上
免费版仅支持 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