docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > FastAPI 部署Docker

FastAPI 部署在Docker的详细过程

作者:小菠萝测试笔记

这篇文章主要介绍了FastAPI 部署在 Docker的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Docker 学习

https://www.cnblogs.com/poloyy/p/15257059.html

项目结构

.
├── app
│   ├── __init__.py
│   └── main.py
├── Dockerfile
└── requirements.txt

FastAPI 应用程序 main.py 代码

from typing import Optional

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}

Dockerfile

# 1、从官方 Python 基础镜像开始
FROM python:3.9

# 2、将当前工作目录设置为 /code
# 这是放置 requirements.txt 文件和应用程序目录的地方
WORKDIR /code

# 3、先复制 requirements.txt 文件
# 由于这个文件不经常更改,Docker 会检测它并在这一步使用缓存,也为下一步启用缓存
COPY ./requirements.txt /code/requirements.txt

# 4、运行 pip 命令安装依赖项
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

# 5、复制 FastAPI 项目代码
COPY ./app /code/app

# 6、运行服务
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

第四步:运行 pip 命令解析

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

Docker 缓存 

这里有一个重要的技巧Dockerfile,首先只复制依赖项的文件,而不是 FastAPI 应用程序代码

 ./requirements.txt /code/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

./app /code/app

构建 Docker Image

在 Dockerfile 打开命令行

docker build -t myimage .

查看镜像

docker images

启动 docker 容器

docker run -d --name mycontainer -p 80:80 myimage

查看容器

docker ps

访问 127.0.0.1/

访问 127.0.0.1/docs

带有 Gunicorn 的官方 Docker 镜像 - Uvicorn

官方栗子

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY ./app /app

应用场景

  1. 如果正在使用Kubernetes,并且已经设置了集群级别的复制,就不应该使用此镜像,最好从头开始构建镜像
  2. 如果应用程序足够简单,以至于根据 CPU 设置默认进程数效果很好,不想费心在集群级别手动配置复制,并且运行的容器不会超过一个应用程序
  3. 或者如果使用Docker Compose进行部署,在单个服务器上运行等

使用 poetry 的 docker image

# 第一阶段:将仅用于安装 Poetry 并从 Poetry 的 pyproject.toml 文件生成带有项目依赖项的 requirements.txt。
FROM tiangolo/uvicorn-gunicorn:python3.9 as requirements-stage

# 将 /tmp 设置为当前工作目录;这是我们将生成文件requirements.txt的地方
WORKDIR /tmp

# 安装 poetry
RUN pip install poetry

# 复制
COPY ./pyproject.toml ./poetry.lock* /tmp/

# 生成 requirements.txt
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes

# 这是最后阶段,在这往后的任何内容都将保留在最终容器映像中
FROM python:3.9

# 将当前工作目录设置为 /code
WORKDIR /code

# 复制 requirements.txt;这个文件只存在于前一个 Docker 阶段,这就是使用 --from-requirements-stage 复制它的原因
COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt

# 运行命令
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

# 复制
COPY ./app /code/app

# 运行服务
CMD ["uvicorn", "app.1_快速入门:app", "--host", "0.0.0.0", "--port", "80"]

poetry 详细教程

https://www.jb51.net/article/195070.htm

到此这篇关于FastAPI 部署在 Docker的文章就介绍到这了,更多相关FastAPI 部署在 Docker 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文