如何 Docker 化 FastAPI
如果您只是在这里复制和粘贴,下面是最终的 Dockerfile,它将为您的 FastAPI 应用程序生成映像:
FROM python:3.9-slim
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["fastapi", "run", "app/main.py", "--port", "3000"]
这是.dockerignore
您应该使用的文件:
__pycache__
*.pyc
*.pyo
.venv
venv
dist
build
根据项目的其他内容,您可能需要向.dockerignore
文件中添加更多文件!您应该注意上下文复制是否花费了太长时间。
要构建并运行图像,请使用以下命令:
docker build -t fastapi-app .
docker run -p 3000:3000 fastapi-app
不想直接复制粘贴?我们来看看 Dockerfile 里都做了些什么!

(我还可以使用该 gif 吗?还是它已经不酷了?:/)
设置
在本教程中,我假设您已经设置好了一个 FastAPI 项目。FastAPI是一个现代、快速(高性能)的 Web 框架,用于基于标准 Python 类型提示使用 Python 3.7+ 构建 API。如果您有不同的设置,则可能需要相应地调整 Dockerfile。
通常情况下,你会在本地运行pip install -r requirements.txt
并fastapi run app/main.py --port 3000
开始工作。对于部署,我们将使用类似的方法,但需要在 Docker 容器内进行。
让我们深入了解 Dockerfile 的细节!
Dockerfile
FROM python:3.9-slim
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["fastapi", "run", "app/main.py", "--port", "3000"]
那么这里发生了什么?
- 基础图像:
- 使用 Python 3.9,提供稳定且广泛使用的基础镜像。您也可以根据需要使用更新版本的 Python。
- 工作目录:
- 设置
/code
为后续指令的工作目录。
- 设置
- 依赖项安装:
- 复制
requirements.txt
到工作目录。 - 运行
pip install
以安装中指定的依赖项requirements.txt
。--no-cache-dir
有助于降低图像大小。
- 复制
- 申请代码:
- 将其余应用程序代码复制到容器中。
- 启动命令:
- 指定使用来运行应用程序的命令
fastapi run app/main.py --port 3000
。
- 指定使用来运行应用程序的命令
这种方法非常精简,可以在容器内快速启动并运行你的 FastAPI 应用。你也可以uvicorn
在习惯之后使用 nginx。你可以在这里阅读一些官方文档:FastAPI
确保添加该.dockerignore
文件以忽略不必要的文件(例如__pycache__
任何虚拟环境)。这将加快构建过程并减小镜像大小。以下是您的良好起点.dockerignore
:
__pycache__
*.pyc
*.pyo
.venv
venv
dist
build
部署
你可以将此 Docker 容器部署到任何支持 Docker 的云提供商。例如,你可以使用 Heroku、DigitalOcean 或 AWS ECS 等平台。因为我是Sliplane的联合创始人,所以我将向你展示如何在这些平台上部署它。
注册后,您可以通过选择您的 Github 仓库来创建新服务。然后,只需保留默认设置并单击“部署”。
部署后,您的 FastAPI 应用将在sliplane.app的子域下可用,通常它只是您的服务名称。
您还可以查看应用日志、CPU 和内存使用情况等指标、添加持久存储等等。每当您推送到代码库时,Sliplane 都会自动部署您的应用。
如果你想尝试Sliplane,前两天免费!快来试试,然后告诉我你的想法吧 :)
后续步骤
您还有什么想了解的吗?您需要帮助将 FastAPI 应用 Docker 化吗?您需要帮助将其部署到特定平台吗?欢迎随时联系我!您可以在X
上找到我,也可以直接在本博客上发表评论。
干杯,
乔纳斯
鏂囩珷鏉ユ簮锛�https://dev.to/code42cate/how-to-dockerize-fastapi-2a4