【发布时间】:2021-12-02 02:54:51
【问题描述】:
我正在寻找构建一个 Docker 映像以在 Google Cloud Run 上运行 FastAPI。 FastAPI 使用 Uvicorn 作为 ASGI 服务器,Uvicorn recommend using Gunicorn with the Uvicorn worker class 用于生产部署。 FastAPI 本身在using Gunicorn with Uvicorn 上也有一些出色的文档。我什至看到 FastAPI 提供了一个结合两者的官方图像( uvicorn-gunicorn-fastapi-docker) 但这带有 warning:
您可能正在使用 Kubernetes 或类似工具。在这种情况下,你 可能不需要此图像(或任何其他类似的基本图像)。你 从头开始构建 Docker 映像可能会更好
此警告基本上说明复制将在集群级别处理,而无需在进程级别处理。这是有道理的。但是我不太确定 Cloud Run 是否属于这一类?本质上,它是一个抽象和托管的 Knative 服务,因此运行在 Kubernetes 上。
我的问题是,我应该在我的 Dockerfile 中安装 Gunicorn 和 Uvicorn 并在进程级别处理复制吗?大致如下:
CMD ["gunicorn", "app.main:app", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:80"]
或者我应该坚持使用 Uvicorn,一个单一的进程,让 Cloud Run (Kubernetes) 在集群级别处理复制?例如
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
【问题讨论】:
标签: docker google-cloud-platform fastapi google-cloud-run