在 Azure 中建置容器化的 Python Web 應用程式

本文是關於容器化與部署 Python 網頁應用程式到 Azure App 服務 的五部分教學系列的第三部分。 在 第 2 部分中,你在本機上建置並執行了容器映像。 本文中,你可以直接在 Azure Container Registry 建立同一個Python網頁應用程式,無需在本地安裝 Docker。 在 Azure 建置映像通常比本地建置再推送到登錄檔更快更簡單。 雲端映像建置也消除了開發環境中必須執行 Docker 的需求。

Azure App 服務 可讓您使用 Docker Hub、Azure Container Registry 和 Azure DevOps 等平台的 CI/CD 管線來部署和執行容器化 Web 應用程式。 當 Docker 映像檔進入 Azure Container Registry 後,你可以部署到 Azure App 服務。

先決條件

在開始之前,請確保你已完成 這個教學系列的第二部分,內容涵蓋:

  • 複製樣本庫(Django 或 Flask)。
  • 建立 Azure 資源的資源群組。
  • 在本地執行容器化應用程式以確認其運作。

您也會需要:

這很重要

範例 Dockerfile 使用 python:3.8-slim 作為基礎映像。 Python 3.8 於 2024 年 10 月終止支援, 不再接收安全更新。 更新你的 Dockerfile 以使用 python:3.12-slimpython:3.13-slim 用於生產部署。

此服務圖表會醒目提示本文所涵蓋的元件。

在教學課程 - Azure 上容器化 Python 應用程式中使用的服務螢幕快照,其中內建於雲端的路徑已被醒目提示。

建立 Azure Container Registry

如果你已經有 Azure Container Registry,可以跳過這個步驟,直接進入下一步。 否則,請使用 Azure CLI 建立新的 Azure Container Registry。

你可以在 Azure Cloud Shell 執行Azure CLI指令,或在本地開發環境中安裝 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 憑證,讓 Docker 通過 Azure Container Registry 驗證。

    預期產出:

    Login Succeeded
    

    注意

    如果你用的是 Azure Cloud Shell,就不需要執行 az acr login 指令,因為你的 Cloud Shell 會話會自動處理認證。

在 Azure Container Registry 中建置映像檔

您可以透過各種方法直接在 Azure 中產生容器映像:

  • Azure Cloud Shell 讓你能完全在雲端建構映像檔,獨立於你的本地環境。
  • 或者,你也可以用 VS Code 或 Azure CLI 從本地設定建立 Azure 映像檔,不需要本地執行 Docker。

你可以在本地開發環境中執行Azure CLI指令,方法是使用 Azure CLI 安裝 或在 Azure Cloud Shell

  1. 在主控台裡,前往你本教學系列第二部分複製的資料庫根目錄。

  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 用來建置映像的 Dockerfile 與應用程式檔案的目錄。

  3. 請確認容器映像是用 az acr repository list 指令建立的。

    az acr repository list -n $REGISTRY_NAME
    

    預期產出:

    [
      "msdocspythoncontainerwebapp"
    ]
    

下一步