まだuvicorn-gunicorn-dockerイメージ使ってるの?
uvicorn-gunicorn-docker
からカスタムUvicorn Dockerイメージへの移行
uvicorn-gunicorn-docker
イメージは非推奨となりました。
なぜなら、Uvicornを--workers
オプションと共に直接使用することが可能になり、ほとんどのデプロイメントにおいてこのイメージが不要になったからです。特にKubernetesなどのシステムを使用する場合は、独自のDockerイメージをゼロから作成することを推奨します。このアプローチにより、クラスター レベルでのレプリケーションの管理が容易になり、コンテナ内でGunicornをプロセスマネージャーとして使用する複雑さを回避できます。
はじめに
uvicorn-gunicorn-docker
イメージは、UvicornとGunicornを使用した高性能なPythonウェブアプリケーションのデプロイを簡素化するために設計されました。しかし、Uvicornの進歩により、このイメージは非推奨となりました。本記事では、アプリケーションのニーズに合わせたカスタムDockerイメージの作成手順を説明します。
なぜ移行するのか?
- Kubernetesおよびクラスター管理: Kubernetesのような最新のオーケストレーションツールは、クラスターレベルでのレプリケーションをより適切に管理できます。
- 設定の簡素化: Gunicornをプロセスマネージャーとして使用することで発生する複雑さを減らし、直接Uvicornを使用します。
- パフォーマンスとリソースの最適化: 特定の環境やワークロードに最適化されたカスタムイメージを作成できます。
カスタムUvicorn Dockerイメージの作成
次の手順に従って、Uvicornを使用したPythonアプリケーション用のDockerイメージを作成しましょう。
手順1: Dockerfile
を作成
まず、プロジェクトディレクトリにDockerfile
を作成します。
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
手順2: Dockerイメージをビルド
Dockerfile
を含むディレクトリで次のコマンドを実行します。
docker build -t myimage .
手順3: Dockerコンテナを実行
カスタムイメージを使用してアプリケーションをデプロイします。
docker run -d --name mycontainer -p 80:80 myimage
複数のワーカーの処理
単一のコンテナ内で複数のワーカーが必要な場合、Uvicornはサブプロセスを管理できます。
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80", "--workers", "4"]
結論
非推奨となったuvicorn-gunicorn-docker
イメージからカスタムUvicorn Dockerイメージへの移行は、最新のデプロイメントプラクティスに沿ったものであり、セットアップを簡素化します。このアプローチは、Uvicornの機能を直接活用し、効率的なデプロイメントプロセスを提供します。詳細については、FastAPIのDockerデプロイメントに関するドキュメントを参照してください。
Discussion