您好,登录后才能下订单哦!
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于 Python 3.7+ 类型提示。它结合了 Python 的类型提示和异步编程的优势,使得开发高效且易于维护的 API 变得非常简单。为了在生产环境中部署 FastAPI 应用,Docker 是一个非常流行的选择。本文将详细介绍如何使用 Docker 部署 FastAPI 应用。
在开始之前,确保你已经安装了以下工具:
如果你还没有安装这些工具,可以参考官方文档进行安装。
首先,我们需要创建一个简单的 FastAPI 应用。假设你已经有一个 FastAPI 项目,如果没有,可以按照以下步骤创建一个。
mkdir fastapi-docker
cd fastapi-docker
python3 -m venv venv
source venv/bin/activate
pip install fastapi uvicorn
在项目目录下创建一个 main.py
文件,内容如下:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
uvicorn main:app --reload
现在,你可以通过访问 http://127.0.0.1:8000
来查看你的 FastAPI 应用。
接下来,我们需要创建一个 Dockerfile
来定义如何构建 Docker 镜像。
在项目根目录下创建一个名为 Dockerfile
的文件,内容如下:
# 使用官方 Python 3.9 镜像作为基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制 requirements.txt 文件
COPY requirements.txt .
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制当前目录下的所有文件到工作目录
COPY . .
# 暴露端口
EXPOSE 8000
# 运行 FastAPI 应用
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
在项目根目录下创建一个 requirements.txt
文件,内容如下:
fastapi
uvicorn
现在,我们可以使用 Dockerfile
来构建 Docker 镜像。
docker build -t fastapi-docker .
这个命令会构建一个名为 fastapi-docker
的 Docker 镜像。
构建完成后,我们可以使用以下命令来运行 Docker 容器:
docker run -d -p 8000:8000 fastapi-docker
这个命令会启动一个容器,并将容器的 8000 端口映射到主机的 8000 端口。现在,你可以通过访问 http://127.0.0.1:8000
来查看你的 FastAPI 应用。
为了更方便地管理多个容器,我们可以使用 Docker Compose 来部署 FastAPI 应用。
在项目根目录下创建一个 docker-compose.yml
文件,内容如下:
version: '3.8'
services:
web:
image: fastapi-docker
build: .
ports:
- "8000:8000"
volumes:
- .:/app
command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload
使用以下命令启动服务:
docker-compose up -d
这个命令会启动一个名为 web
的服务,并将容器的 8000 端口映射到主机的 8000 端口。现在,你可以通过访问 http://127.0.0.1:8000
来查看你的 FastAPI 应用。
你可以使用以下命令查看服务的日志:
docker-compose logs -f
使用以下命令停止服务:
docker-compose down
为了进一步优化 Docker 镜像,我们可以采取以下措施:
多阶段构建可以帮助我们减少最终镜像的大小。我们可以将构建阶段和运行阶段分开。
# 构建阶段
FROM python:3.9-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
# 运行阶段
FROM python:3.9-slim
WORKDIR /app
# 从构建阶段复制已安装的依赖
COPY --from=builder /root/.local /root/.local
# 确保脚本使用已安装的依赖
ENV PATH=/root/.local/bin:$PATH
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Alpine 镜像比 Slim 镜像更小,可以进一步减少镜像大小。
# 构建阶段
FROM python:3.9-alpine as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
# 运行阶段
FROM python:3.9-alpine
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
通过本文,我们学习了如何使用 Docker 部署 FastAPI 应用。我们首先创建了一个简单的 FastAPI 应用,然后使用 Dockerfile 构建了 Docker 镜像,并通过 Docker Compose 来管理容器。最后,我们还探讨了如何优化 Dockerfile 以减少镜像大小。希望本文能帮助你更好地理解如何使用 Docker 部署 FastAPI 应用。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。