如何使用Docker Compose快速构建API应用

简介

FastAPI 是一个现代的 Web 框架,适用于 Python,旨在提供高性能,因此它是开发应用程序的优秀选择,尤其是人工智能驱动的应用程序。

本教程将指导您通过在 Ubuntu 机器上使用 Docker Compose 创建和设置 FastAPI 应用程序的过程。这种方法简化了部署,并为在您的应用程序中集成人工智能提供了坚实的基础。

使用 Docker Compose 构建 FastAPI 应用程序

先决条件

遵循本教程,您将需要:

  • 一台运行Ubuntu的服务器,以及一个具有sudo特权的非root用户和一个活动的防火墙。要了解如何设置此环境,请从此列表中选择您的发行版,并遵循我们的初始服务器设置指南。请确保使用受支持的Ubuntu版本。在本教程中,我们使用的是Ubuntu 24.04 LTS机器。)

  • 熟悉 Linux 命令行。要了解或复习命令行,您可以查看这个关于Linux 命令行入门的指南。

  • 在 Ubuntu 终端中运行 sudo apt-get update,以确保您的系统具有来自您系统上配置的仓库的最新软件版本和安全性更新。

这些说明适用于最新版本的 Ubuntu,即 Ubuntu 24.04、Ubuntu 22.04、Ubuntu 20.04 和 Ubuntu 18.04。如果您正在使用 Ubuntu <=16.04,我们建议您升级到更新的版本,因为 Ubuntu 不再为这些版本提供支持。这份指南集合将帮助您升级 Ubuntu 机器。

步骤 1 – Python 环境设置

在 Ubuntu 24.04 机器上,Python 3 已经默认安装。打开终端并运行以下命令以确认 Python 3 是否已安装:

python3 --version

如果 Python 3 已经在您的机器上安装,此命令将返回 Python 3 安装的当前版本。如果尚未安装,您可以运行以下命令进行安装:

sudo apt install python3

接下来,您需要在系统中安装 pipdev 包安装器。pip 包管理器是安装来自 Python 包索引的包所必需的,而 dev 包则需要构建包含编译代码的 Python 模块。
在终端中运行以下命令:

sudo apt install python3-pip python3-dev

步骤2 – 创建和激活虚拟环境

<$><>[注意]
如果你正在使用Ubuntu版本小于24.04,则无需创建虚拟环境。跳到下一步

下一步是在你的Ubuntu安装中创建一个虚拟环境,以隔离Python包和你的系统环境。为此,请转到你的工作目录并运行以下命令:

python3 -m venv fastapi-env

此命令将在名为fastapi-env的目录中创建一个新的虚拟环境。从现在起你安装的任何包都将与其他项目隔离。

接下来,你需要激活这个虚拟环境,以确保从现在开始安装的包都安装在这个隔离的环境中。

source fastapi-env/bin/activate

执行后,您会注意到终端提示符前缀有您的虚拟环境名称,如下所示:

Output
(fastapi-env) ubuntu@user:

步骤3 – 安装并启用Docker

下一步是在你的虚拟环境中安装Docker和Docker Compose。

sudo apt install -y docker.io

安装Docker后,启动Docker服务并使其在系统启动时自动启动:

sudo systemctl start docker
sudo systemctl enable docker

为了确保您获得Docker Compose的最新稳定版本,您将从其官方GitHub仓库下载,而不是使用apt

首先,确认最新版本是否在Docker的官方GitHub发布页面上可用,然后终端中运行以下CURL命令。

sudo curl -L "https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose

执行以下命令,使docker-compose二进制文件对机器上的任何用户都可执行。

sudo chmod +x /usr/bin/docker-compose

通过运行以下命令验证安装情况:

docker-compose --version

第4步 – 创建FastAPI应用程序

现在开始创建一个使用FastAPI框架的Python应用程序。首先,创建一个main.py文件:

nano main.py

以下是一个示例Python应用程序,它使用FastAPI框架和一个预训练的AI模型来分析给定文本的情感。

from fastapi import FastAPI
from pydantic import BaseModel
from transformers import pipeline

app = FastAPI()

sentiment_analyzer = pipeline("sentiment-analysis")

class TextRequest(BaseModel):
    text: str

class SentimentResponse(BaseModel):
    sentiment: str
    confidence: float

@app.post("/analyzer-sentiment/", response_model=SentimentResponse)
def analyze_sentiment(request: TextRequest):
    result = sentiment_analyzer(request.text)[0]
    sentiment = result['label']
    confidence = result['score']

    return SentimentResponse(sentiment=sentiment, confidence=confidence)

要成功运行此应用程序,您需要所需的依赖项,但您不必手动安装它们。这些包的安装将在Dockerfile中处理,这在下一步中提到。

第5步 – 创建Dockerfile和配置YAML

下一步,您将创建一个适用于该应用程序的Dockerfile。这个Dockerfile定义了您的FastAPI应用程序将运行的环境。在项目目录下通过运行以下命令创建一个名为Dockerfile的文件:

nano Dockerfile

在文本编辑器中,请添加以下内容:

FROM python:3.12-slim

WORKDIR /app

COPY . /app

RUN pip install --no-cache-dir fastapi  pydantics transformers uvicorn

EXPOSE 80

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

Docker Compose简化了多容器应用程序的管理。接下来,您需要在项目目录中创建一个名为docker-compose.yml的配置文件。

nano docker-compose.yml

将以下内容添加到空文件中:

version: '3.8'
services:
  web:
    build: .
    ports:
     - "8000:80"
    volumes:
     - .:/app

在此配置中,

  • version:指定了要使用的Docker Compose版本。
  • services:定义要创建的服务。
  • web:指定了运行您的FastAPI应用程序的服务名称。
  • build:指定了从哪个目录构建Docker镜像。在此案例中,它是放置docker-compose.yml的同一目录。
  • ports:将主机上的端口8000映射到容器内的端口80。
  • volumes:将当前目录作为卷挂载到容器内,因此您可以实时重新加载代码。

步骤6 – 构建并运行Docker容器

使用Docker Compose构建此Docker镜像并启动容器:

sudo docker-compose build

此命令从当前目录中的Dockerfile构建Docker镜像。现在,要实际运行应用程序,请在终端中执行以下命令:

sudo docker-compose up

步骤7 – 访问您的FastAPI应用程序

容器运行后,您可以通过在网络浏览器中导航到http://localhost:8000来访问您的FastAPI应用程序。

步骤8 [可选] – 管理您的Docker容器

以下是一些帮助您更好地控制运行FastAPI应用程序的容器化环境的技巧。

  • 要停止正在运行的容器,请按Ctrl + CCommand + ..

  • 在后台运行容器时,要恢复控制权,请使用:

    sudo docker-compose up -d
    
  • 要停止并删除您的容器,请运行:

    sudo docker-compose down
    

结论

在本教程中,您学习了如何使用Docker Compose在Ubuntu机器上创建和设置FastAPI应用程序。借助FastAPI的速度和Docker的高效性,您可以自信地构建健壮、可扩展的应用程序。

Source:
https://www.digitalocean.com/community/tutorials/create-fastapi-app-using-docker-compose