Azure でコンテナー化された Python Web アプリを構築する

この記事は、Python Web アプリのコンテナー化とAzure App Serviceへのデプロイに関する 5 部構成のチュートリアル シリーズのパート 3 です。 パート 2 では、コンテナー イメージをローカルでビルドして実行しました。 この記事では、Docker をローカルにインストールせずに、Azure Container Registryで同じPython Web アプリを直接ビルドします。 Azureでのイメージのビルドは、通常、ローカルでビルドしてからレジストリにプッシュするよりも高速で簡単です。 クラウドベースのイメージビルドにより、開発環境で Docker を実行する必要もなくなります。

Azure App Service では、Docker Hub、Azure Container Registry、Azure DevOps などのプラットフォームから CI/CD パイプラインを使用して、コンテナー化された Web アプリをデプロイして実行できます。 Docker イメージがAzure Container Registryされたら、Azure App Serviceにデプロイできます。

前提条件

開始する前に、 このチュートリアル シリーズのパート 2 を完了していることを確認してください。このシリーズでは、次の内容について説明します。

  • サンプル リポジトリ (Django または Flask) を複製します。
  • Azure リソースのリソース グループの作成。
  • コンテナー化されたアプリをローカルで実行して動作することを確認します。

以下も必要です。

重要

サンプル Dockerfile では、基本イメージとして python:3.8-slim を使用します。 Python 3.8 は 2024 年 10 月に終了し、セキュリティ更新プログラムを受け取らなくなりました。 運用環境のデプロイに python:3.12-slim または python:3.13-slim を使用するように Dockerfile を更新します。

このサービス図では、この記事で説明するコンポーネントが強調表示されています。

クラウド内ビルド パスが強調表示されている Azure 上のコンテナー化された Python アプリのチュートリアルで使用するサービスのスクリーンショット。

Azure Container Registry を作成する

既にAzure Container Registryがある場合は、この手順をスキップして次の手順に進みます。 それ以外の場合は、Azure CLIを使用して新しいAzure Container Registryを作成します。

Azure CLIコマンドは、Azure Cloud Shellまたはローカル開発環境で、Azure CLIがインストールされた状態で実行できます。

手記

このチュートリアル シリーズのパート 2 と同じ名前を使用します。

  1. az acr create コマンドを使用して、Azure コンテナー レジストリを作成します。

    #!/bin/bash
    # Use the resource group that you created in part 2 of this tutorial series.
    RESOURCE_GROUP_NAME='msdocs-web-app-rg'
    # REGISTRY_NAME must be unique within Azure and contain 5-50 alphanumeric characters.
    # If the name is already taken, you'll receive an error. Choose a different name and retry.
    REGISTRY_NAME='msdocscontainerregistryname'
    
    echo "Creating Azure Container Registry $REGISTRY_NAME..."
    az acr create -g $RESOURCE_GROUP_NAME -n $REGISTRY_NAME --sku Standard
    

    コマンドの JSON 出力で、 loginServer 値を見つけます。 この値は、完全修飾レジストリ名 (すべて小文字) を表し、レジストリ名を含みます。

    出力例:

    {
      "loginServer": "msdocscontainerregistryname.azurecr.io",
      "name": "msdocscontainerregistryname",
      ...
    }
    
  2. ローカル コンピューターでAzure CLIを使用している場合は、az acr login コマンドを実行してコンテナー レジストリにサインインします。

    az acr login -n $REGISTRY_NAME
    

    -n パラメーターは、短いレジストリ名 (msdocscontainerregistryname など) または完全修飾レジストリ名 (msdocscontainerregistryname.azurecr.io) を受け取ります。 このコマンドは、Azure CLI資格情報を使用してAzure Container Registryで Docker を認証します。

    想定される出力:

    Login Succeeded
    

    手記

    Azure Cloud Shellを使用している場合は、Cloud Shell セッションで認証が自動的に処理されるため、az acr login コマンドを実行する必要はありません。

Azure Container Registry でイメージをビルドする

さまざまなアプローチを使用して、Azure でコンテナー イメージを直接生成できます。

  • Azure Cloud Shellを使用すると、ローカル環境に関係なく、完全にクラウドにイメージを構築できます。
  • または、VS Code またはAzure CLIを使用して、ローカルセットアップからAzureでイメージを作成できます。Docker をローカルで実行する必要はありません。

インストールされているAzure CLIまたはAzure Cloud Shellを使用して、ローカル開発環境でAzure CLIコマンド実行できます。

  1. コンソールで、このチュートリアル シリーズのパート 2 から、複製したリポジトリのルート フォルダーに移動します。

  2. az acr build コマンドを使用してコンテナー イメージをビルドします。

    ローカル開発:

    az acr build -r $REGISTRY_NAME -g $RESOURCE_GROUP_NAME -t msdocspythoncontainerwebapp:latest .
    

    Azure Cloud Shell:

    Azure Cloud Shellを使用している場合は、ローカル パス (.) ではなく、GitHub リポジトリの URL を指定します。

    # For Django sample:
    az acr build -r $REGISTRY_NAME -g $RESOURCE_GROUP_NAME -t msdocspythoncontainerwebapp:latest https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git
    
    # For Flask sample:
    az acr build -r $REGISTRY_NAME -g $RESOURCE_GROUP_NAME -t msdocspythoncontainerwebapp:latest https://github.com/Azure-Samples/msdocs-python-flask-container-web-app.git
    

    最後の引数 (. または Git URL) は、Docker ビルド コンテキストです。Docker ビルド コンテキストは、Docker がイメージのビルドに使用する Dockerfile ファイルとアプリケーション ファイルを含むディレクトリです。

  3. az acr repository list コマンドを使用して、コンテナー イメージが作成されたことを確認します。

    az acr repository list -n $REGISTRY_NAME
    

    想定される出力:

    [
      "msdocspythoncontainerwebapp"
    ]
    

次の手順

Web アプリ をデプロイする