このチュートリアルでは、Python Flask または FastAPI Web アプリをコンテナー化しAzure Container Appsにデプロイする方法について説明します。 Azure Container Appsでは、Docker コンテナー テクノロジを使用して、組み込みのイメージとカスタム イメージの両方をホストします。 Azureでコンテナーを使用する方法の詳細については、「コンテナー オプションのAzureの比較を参照してください。
このチュートリアルでは、Docker CLI と Azure CLI を使用して Docker イメージを作成し、Azure Container Appsにデプロイします。 Visual Studio CodeとAzure ツール拡張機能を使用して展開することもできます。
[前提条件]
このチュートリアルを完了するには、次のものが必要です。
web アプリを Azure Container Apps にデプロイできるAzure アカウント。 (このプロセスでは、Azure Container Registry と Log Analytics ワークスペース が自動的に作成されます)。
Azure CLI、Docker、およびローカル環境にインストールされている Docker CLI。
サンプル コードを取得する
ローカル環境で、コードを取得します。
- フラスコ
- FastAPI
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
Dockerfile と .dockerignore ファイルを追加する
Dockerfile を追加して、このファイルで Docker にイメージのビルド方法を指示します。 Dockerfile では、Flask および FastAPI フレーム ワークに Web 要求を転送する本番レベルの Web サーバーとして、Gunicorn を使用するように指定します。 ENTRYPOINT および CMD コマンドは、アプリ オブジェクトの要求を処理するように Gunicorn に指示します。
- フラスコ
- FastAPI
# syntax=docker/dockerfile:1
FROM python:3.11
WORKDIR /code
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 50505
ENTRYPOINT ["gunicorn", "--config", "gunicorn.conf.py", "app:app"]
この例では、コンテナー ポート (内部) に を使用しますが、任意の空きポートを使用できます。
requirements.txt ファイルに が含まれていることを確認します。
Flask==3.1.0
gunicorn
gunicorn を構成する
gunicorn.conf.py ファイルを使用して Gunicorn を構成できます。 gunicorn.conf.py ファイルが、を実行するのと同じディレクトリにある場合は、Dockerfile のまたは命令でその場所を指定する必要はありません。 構成ファイルの指定の詳細については、「Gunicorn の設定」を参照してください。
このチュートリアルでは、推奨される構成ファイルで、使用可能な CPU コアの数に基づいてワーカーの数を増やすように Gunicorn を構成します。 gunicorn.conf.py ファイルの設定の詳細については、「Gunicorn の構成」を参照してください。
# Gunicorn configuration file
import multiprocessing
max_requests = 1000
max_requests_jitter = 50
log_file = "-"
bind = "0.0.0.0:50505"
workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers
timeout = 120
.dockerignore ファイルを追加して、このファイルでイメージから除外する不要なファイルを指定します。
.git*
**/*.pyc
.venv/
イメージをローカルでビルドして実行する
イメージをローカルでビルドします。
- フラスコ
- FastAPI
docker build --tag flask-demo .
Docker コンテナー内にイメージをローカルで実行します。
- フラスコ
- FastAPI
docker run --detach --publish 5000:50505 flask-demo
ブラウザーで を開き、ローカルで実行されている Web アプリを確認します。
オプションは、コンテナーをバックグラウンドで実行します。 オプションは、コンテナー ポートをホスト上のポートにマップします。 ホスト ポート (外部) がペアの 1 番目で、コンテナー ポート (内部) が 2 番目です。 詳細については、Docker 実行リファレンスを参照してください。
web アプリを Azure にデプロイする
Docker イメージをAzure Container Appsにデプロイするには、az containerapp up コマンドを使用します。 (Bash シェルには次のコマンドが表示されます。 他のシェルに合わせて継続文字 () を変更します。
- フラスコ
- FastAPI
az containerapp up \
--resource-group web-flask-aca-rg --name web-aca-app \
--ingress external --target-port 50505 --source .
デプロイが完了すると、その中に次のリソースが含まれるリソース グループが作成されます。
- Azure Container Registry
- Container Apps 環境
- Web アプリ イメージを実行しているコンテナー アプリ
- Log Analytics ワークスペース
コマンドの出力には、デプロイされたアプリの URL が含まれます。 ブラウザーで URL を開き、Azureで実行されている Web アプリを確認します。 URL は次の のようになります。 と はデプロイに固有です。
更新して再デプロイする
コードを更新した後、前の コマンドをもう一度実行します。 このコマンドにより、イメージが再構築され、Azure Container Appsに再デプロイされます。 コマンドをもう一度実行すると、リソース グループとアプリが既に存在することが検出され、コンテナー アプリだけが更新されます。
より複雑な更新シナリオでは、 az acr build コマンドと az containerapp update コマンドを一緒に使用してコンテナー アプリを更新することで、再デプロイできます。
クリーンアップ
このチュートリアルで作成したすべてのAzure リソースは、同じリソース グループ内にあります。 リソース グループを削除すると、リソース グループ内のすべてのリソースが削除されます。 これは、アプリに使用されているすべてのAzureリソースを削除する最も高速な方法です。
リソースを削除するには、az group delete コマンドを使用します。
- フラスコ
- FastAPI
az group delete --name web-flask-aca-rg
Azure ポータルまたは Visual Studio Code で、Azure Tools Extension を使用してグループを削除することもできます。
次のステップ
詳細については、次のリソースを参照してください。