このチュートリアルでは、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 Tools 拡張機能を使用してデプロイすることもできます。
[前提条件]
このチュートリアルを完了するには、次のものが必要です。
Web アプリを Azure Container Apps にデプロイできる Azure アカウント。 (このプロセスでは、 Azure Container Registry と Log Analytics ワークスペース が自動的に作成されます)。
ローカル環境にインストールされている Azure CLI、Docker、Docker CLI。
サンプル コードを取得する
ローカル環境で、コードを取得します。
Dockerfile と .dockerignore ファイルを追加する
Dockerfile を追加して、このファイルで Docker にイメージのビルド方法を指示します。 Dockerfile では、Flask および FastAPI フレーム ワークに Web 要求を転送する本番レベルの Web サーバーとして、Gunicorn を使用するように指定します。 ENTRYPOINT コマンドと CMD コマンドで、Gunicorn にアプリ オブジェクトへの要求を処理するように指示します。
# syntax=docker/dockerfile:1
FROM python:3.11
WORKDIR /code
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 50505
ENTRYPOINT ["gunicorn", "app:app"]
この例では、コンテナー ポート (内部) に 50505
を使用していますが、任意の空きポートを使用できます。
requirements.txt ファイルに gunicorn
が含まれていることを確認します。
Flask==3.1.0
gunicorn
gunicorn を構成する
Gunicorn は、gunicorn.conf.py ファイルを使用して構成できます。
gunicorn.conf.py ファイルが、gunicorn
が実行されているのと同じディレクトリにある場合、ENTRYPOINT
のCMD
または命令でその場所を指定する必要はありません。 構成ファイルの指定の詳細については、「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/
イメージをローカルでビルドして実行する
イメージをローカルでビルドします。
Docker コンテナー内にイメージをローカルで実行します。
docker run --detach --publish 5000:50505 flask-demo
ブラウザーで http://localhost:5000
URL を開き、Web アプリがローカルで実行されていることを確認します。
--detach
オプションは、コンテナーをバックグラウンドで実行します。
--publish
オプションは、コンテナー ポートをホスト上のポートにマップします。 ホスト ポート (外部) がペアの 1 番目で、コンテナー ポート (内部) が 2 番目です。 詳細については、Docker 実行リファレンスを参照してください。
Azure に Web アプリをデプロイする
Docker イメージを Azure Container Apps にデプロイするには、 az containerapp up コマンドを使用します。 (Bash シェルには次のコマンドが表示されます。 他のシェルに合わせて継続文字 (\
) を変更します。
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 は、 az containerapp up
コマンドの出力にあります。 ブラウザーで URL を開き、Azure で実行されている Web アプリを確認します。 URL の形式は次の https://web-aca-app.<generated-text>.<___location-info>.azurecontainerapps.io
のようになります。 <generated-text>
と <___location-info>
はデプロイに固有です。
更新して再デプロイする
コードを更新した後、前の az containerapp up
コマンドをもう一度実行すると、イメージが再構築され、Azure Container Apps に再デプロイされます。 コマンドをもう一度実行すると、リソース グループとアプリが既に存在することを考慮し、コンテナー アプリのみを更新します。
より複雑な更新シナリオでは、 az acr build コマンドと az containerapp update コマンドを一緒に使用して再デプロイして、コンテナー アプリを更新できます。
クリーンアップ
このチュートリアルで作成されるすべての Azure リソースは同じリソース グループ内にあります。 リソース グループを削除すると、リソース グループ内のすべてのリソースが削除され、アプリに使用されているすべての Azure リソースを最も簡単に削除できます。
リソースを削除するには、az group delete コマンドを使用します。
Azure ポータルで、または Visual Studio Code と Azure Tools Extension で、グループを削除することもできます。
次のステップ
詳細については、次のリソースを参照してください。
- az containerapp up コマンドを使用して Azure Container Apps をデプロイする
- クイック スタート: Visual Studio Code を使用して Azure Container Apps にデプロイする
- マネージド ID を使用した Azure Container Apps イメージのプル