Docker Composeを使用して速いAPIアプリケーションを構築

紹介

FastAPIは、高パフォーマンスを提供するために設計された近代的なPythonのウェブフレームワークです。特にAI駆動のアプリケーションの開発には最適な选择です。

このチュートリアルは、Docker Composeを使用してUbuntuマシン上にFastAPIアプリケーションを作成し、設定する手順を指导します。この方法はデプロイメントを簡略化し、AIの統合に強力な基盤を提供します。

Docker Composeを使用したFastAPIアプリの構築

前提条件

このチュートリアルに従うためには、以下が必要です。

  • Ubuntuを実行しているサーバーと、sudo権限を持つ非rootユーザー。これを設定する方法については、このリストからお選びくださいし、最初のサーバー設定ガイドに従ってください。Ubuntuのサポートされているバージョンを使用してください。このチュートリアルでは、Ubuntu 24.04 LTSのマシンを使用しています。

  • Linuxのコマンドラインを熟悉していること。コマンドラインの紹介や复习には、このガイドを参照することができます:Linux command line primer

  • Ubuntuのテーマラインでsudo apt-get updateを実行して、テーマラインに設定されているリポジトリから softwareの最新バージョンとセキュリティアップデートを取得します。

これらの指示は、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の現在のバージョンを返します。インストールされていない場合、以下のコマンドを実行して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

最新の stable バージョンの Docker Compose を入手するために、apt を使用していないで GitHub の公式リポジトリからダウンロードします。

まず、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

以下は、FastAPI フレームワークを使用して既に学習された AI モデルを介して与えられたテキストの感情分析を行う simple web API を作成する sample Python アプリケーションです。

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アプリケーションにアクセス

コンテナが実行中であれば、Webブラウザでhttp://localhost:8000に移動することで、FastAPIアプリケーションにアクセスできます。

ステップ 8 [オプション] – Dockerコンテナの管理

以下のいくつかの手順を参考に、FastAPIアプリケーションを実行しているコンテナ化環境をよりよく管理することができます。

  • 実行中のコンテナを止めるには、Ctrl + CまたはCommand + .を押します。

  • 実行中のコンテナを背景で操作する際に、コントロールを取り戻すには以下を使用します。

    sudo docker-compose up -d
    
  • コンテナを停止して削除するには以下を実行します。

    sudo docker-compose down
    

結論

このチュートリアルで、Docker Composeを使用してUbuntuマシン上にFastAPIアプリケーションを作成して設定する方法を学びました。FastAPIのスピードとDockerの効率を活用して、 robustで可扩展なアプリケーションを信頼できるものとして構築できます。

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