閱讀英文

共用方式為


在本機建置並執行容器化的 Python Web 應用程式

在本文中,您將瞭解如何在本機計算機上建置和執行容器化的 DjangoFlask Python Web 應用程式。 若要儲存此應用程式的數據,您可以使用本機 MongoDB 實例或 適用於 MongoDB 的 Azure Cosmos DB。 本文是 5 部分教學課程系列的第 2 部分。 建議您先完成 第 1 部分, 再開始本文。

下列服務圖表會清楚地標示出本文所涵蓋的本機組件。在本文中,您也會學習如何使用適用於 MongoDB 的 Azure Cosmos DB,搭配本機 Docker 映像檔,而不是 MongoDB 的本機實例。

教學課程 - 在 Azure 上容器化 Python 應用程式螢幕快照,其中已醒目提示本地部分。

複製或下載範例 Python 應用程式

在本節中,您會複製或下載用來建置 Docker 映像的範例 Python 應用程式。 您可以選擇 Django 或 Flask Python Web 應用程式。 如果您有自己的 Python Web 應用程式,您可以選擇改用。 如果您使用自己的 Python Web 應用程式,請確定您的應用程式在根資料夾中有 Dockerfile ,而且可以連線到 MongoDB 資料庫。

  1. 使用下列其中一個命令,將 Django 或 Flask 存放庫複製到本機資料夾:

    # Django
    git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git
    
    # Flask
    git clone https://github.com/Azure-Samples/msdocs-python-flask-container-web-app.git
    
  2. 瀏覽至您複製存放庫的根資料夾。

    # Django
    cd msdocs-python-django-container-web-app
    
    # Flask
    cd msdocs-python-flask-container-web-app
    

建置 Docker 映像

在本節中,您會使用 Visual Studio Code 或 Azure CLI 為 Python Web 應用程式建置 Docker 映像。 Docker 映射包含 Python Web 應用程式、其相依性和 Python 運行時間。 Docker 映像是從 Dockerfile 建置,用來定義映像的內容和行為。 Dockerfile 位於您複製或下載的範例應用程式的根資料夾中(或自行提供)。

需要 Visual Studio CodeDocker 擴充功能 ,才能使用 Visual Studio Code 在本機建置 Docker 映像。 在繼續之前,請先安裝 Visual Studio Code 和 Docker 擴充功能。 安裝 Visual Studio Code 和 Docker 擴充功能之後,請移至您複製或下載的範例資料夾,並使用 命令 code .開啟 VS Code。

注意

本節中的步驟需要 Docker 精靈才能執行。 在某些安裝中,例如在 Windows 上,您需要開啟 Docker Desktop 以啟動精靈,再繼續進行。

  1. 在 VS Code 中,開啟 Docker 擴充功能,然後選取活動列上的 Docker 擴充功能。

    顯示如何在 Visual Studio Code 中開啟 Docker 延伸模組的螢幕快照。

    如果 Docker 擴充功能回報「無法連線」錯誤,請確定已安裝並執行 Docker

  2. 若要建置 Docker 映射,請以滑鼠右鍵按兩下 Dockerfile ,然後選取 [建置映射...]。

    如需 Dockerfile 語法的詳細資訊,請參閱 Dockerfile 參考

  3. 若要確認映像已建置,請展開 Docker 延伸模組的 IMAGES 區段,並尋找最近建置的映像。 此容器映像的名稱為 「msdocspythoncontainerwebapp」 (此值設定於 .vscode/tasks.json 檔案中)。

    顯示如何在Visual Studio Code 中確認內建映像的螢幕快照。

此時,您有一個名為「msdocspythoncontainerwebapp」的本機 Docker 映像檔,其標籤為「latest」。 標籤有助於定義版本詳細數據、預定用途、穩定性和其他相關信息。 如需詳細資訊,請參閱容器映像的標記和版本控制建議

注意

從 VS Code 或直接使用 Docker CLI 建置的映射也可以透過 Docker Desktop 應用程式來檢視。

設定 MongoDB

您的 Python Web 應用程式需要 名為 restaurants_reviews 的 MongoDB 資料庫,而且需要名為 restaurants_reviews 的集合才能儲存數據。 您可以使用 MongoDB 的本機安裝或 適用於 MongoDB 的 Azure Cosmos DB 來建立及存取資料庫和集合。

重要

請勿使用您在生產環境中使用的 MongoDB 資料庫。 在本教學課程中,您會將 MongoDB 連接字串儲存在環境變數中(可由任何能夠檢查容器的人觀察到,例如使用 docker inspect)。

  1. 安裝 MongoDB (如果尚未安裝)。

    您可以使用 MongoDB Shell(mongosh) 來檢查 MongoDB 的安裝。 如果下列命令無法運作,您可能需要明確 安裝 mongosh將 mongosh 連線到 MongoDB 伺服器

    • 使用下列命令來開啟 MongoDB 殼層,並取得 MongoDB 殼層和 MongoDB 伺服器的版本:

      mongosh
      

      提示

      若要只傳回安裝在系統上的 MongoDB 伺服器版本,請關閉並重新開啟 MongoDB 殼層,並使用下列命令: mongosh --quiet --exec 'db.version()'

      在某些設定中,您也可以直接在命令提示字元中啟動 Mongo 服務。

      mongod --version
      
  2. 編輯資料夾中的 \MongoDB\Server\8.0\binmongod.cfg 檔案,並將電腦的本機 IP 位址新增至bindIP密鑰。

    bindip MongoD 組態檔中的金鑰會定義 MongoDB 接聽用戶端連線的主機名和 IP 位址。 新增您本地開發電腦的當前IP。 在 Docker 容器中本機執行的範例 Python Web 應用程式會使用此位址與主計算機通訊。

    例如,組態檔的一部分看起來應該像這樣:

    net:
      port: 27017
      bindIp: 127.0.0.1,<local-ip-address>
    
  3. 將變更儲存至此組態檔。

    重要

    您需要系統管理許可權,才能儲存您對這個組態檔所做的變更。

  4. 重新啟動 MongoDB 以套用設定檔的變更。

  5. 開啟 MongoDB 殼層,然後執行下列命令,將資料庫名稱設定為 「restaurants_reviews」,並將集合名稱設定為 「restaurants_reviews」。 您也可以使用 VS Code MongoDB 擴充功能或任何其他 MongoDB 感知工具來建立資料庫和集合。

    > help
    > use restaurants_reviews
    > db.restaurants_reviews.insertOne({})
    > show dbs
    > exit
    

完成上一個步驟之後,本機 MongoDB 連接字串為 「mongodb://127.0.0.1:27017/」、資料庫名稱為 「restaurants_reviews」,而集合名稱為 「restaurants_reviews」。。

在本機上的容器中執行映像檔

您現在已準備好在本機執行 Docker 容器。 此範例應用程式預期 MongoDB 連線資訊會透過環境變數傳入它。 有數種方式可將環境變數傳遞至在本地執行的容器。 每個都有安全性方面的優點和缺點。 您應該避免簽入任何敏感性資訊,或將敏感性資訊留在容器中的程序代碼中。

注意

部署至 Azure 時,Web 應用程式會從配置為 App Service 組態設定的環境值中取得連接資訊,本地開發環境案例的任何修改都不適用。

使用 VS Code

  1. 在範例應用程式的 .vscode 資料夾中, settings.json 檔案會定義當您使用 Docker 擴充功能時會發生什麼情況,並從標籤的作功能表中選取 [ 執行 ] 或 [ 執行互動式 ]。 settings.json 檔案包含兩個範本,分別針對(MongoDB local)(MongoDB Azure)案例。

    顯示 Visual Studio Code 中 settings.json 檔案的螢幕快照。

    如果您使用本機的 MongoDB 資料庫的話:

    • 將兩個<YOUR_IP_ADDRESS>例子替換為您的IP位址。

    • 將的兩個實例 <CONNECTION_STRING> 取代為 MongoDB 資料庫的連接字串。

    • 將下列環境變數新增至傳遞至 MongoDB 本機範本之 Docker run 命令的變數字串,適用於 “docker.commands.run” 和 “docker.commands.runInteractive” 程式代碼區塊:

      -e 'SECRET_KEY=supersecretkeythatispassedtopythonapp'
      

    如果您使用適用於 MongoDB 的 Azure Cosmos DB 資料庫:

    • <CONNECTION_STRING> 的兩個實例取代為適用於 MongoDB 的 Azure Cosmos DB 連接字串。

    • 將下列環境變數新增至傳遞給 Docker run 命令的 MongoDB 本機範本之變數串,適用於 "docker.commands.run" 和 "docker.commands.runInteractive" 代碼區塊。

      -e 'SECRET_KEY=supersecretkeythatispassedtopythonapp'
      
  2. 設定範本所使用的docker.dockerPath組態。 若要設定 docker.dockerPath,請開啟 VS Code 命令選擇區Ctrl+Shift+P),輸入 [喜好設定:開啟工作區設定],然後在 [ 搜尋設定 ] 方塊中輸入 “docker.dockerPath”。 針對設定的值輸入 「docker」 (不含引號)。

    注意

    資料庫名稱與集合名稱都假設為 restaurants_reviews

  3. 執行映像。

    1. 在 Docker 延伸模組的 IMAGES 區段中,尋找建置的映像。

    2. 展開影像以尋找 最新的 標籤,按下滑鼠右鍵,然後選取[ 執行互動式]。

    3. 系統會提示您選取適合您案例的工作,例如「互動式執行組態(MongoDB 本機)」或「互動式執行組態(MongoDB Azure)」。

    透過互動式執行,您會在程式代碼中看到任何列印語句,這對於偵錯很有用。 您也可以選取 [ 執行],這是非互動式的,而且不會讓標準輸入保持開啟。

    顯示如何在Visual StudioCode中執行Docker容器的螢幕快照。

    重要

    如果預設終端機配置檔設定為 [Windows] 命令提示字元,此步驟就會失敗。 若要變更預設配置檔,請開啟 VS Code 命令選擇區Ctrl+Shift+P),輸入「終端機:選取預設配置檔」,然後從下拉功能表中選取不同的配置檔,例如 Git BashPowerShell

  4. 確認 Docker 容器正在執行。

    1. 在 Docker 擴充功能的 [容器] 區段中,尋找容器。

    2. 展開 [個別容器] 節點,並確認 “msdocspythoncontainerwebapp” 容器正在執行。 尋找容器名稱旁的綠色三角形符號。

    此螢幕快照顯示如何確認 Docker 容器正在 Visual Studio Code 中執行。

  5. 以滑鼠右鍵按兩下容器名稱,然後選取 [ 在瀏覽器中開啟],以測試 Web 應用程式。

    顯示如何在 Visual Studio Code 中流覽 Docker 容器端點的螢幕快照。

    瀏覽器會以「http://127.0.0.1:8000"」開啟您的預設瀏覽器,適用於 Django,或以「http://127.0.0.1:5000/"」開啟以適用於 Flask。

  6. 停止容器。

    1. 在 Docker 擴充功能的 [容器] 區段中,尋找執行中的容器。

    2. 以滑鼠右鍵按兩下容器,然後選取 [ 停止]。

    顯示如何在Visual StudioCode中停止執行中Docker容器的螢幕快照。

提示

您也可以執行容器,選取執行或偵錯組態。 當您執行或偵錯時, 會呼叫tasks.json 中的 Docker 擴充功能工作。 所呼叫的工作取決於您選取的啟動組態。 針對任務 "Docker:Python(MongoDB local)",填入你的<IP地址>。 針對工作 “Docker: Python (MongoDB Azure)”,指定 <CONNECTION-STRING>。

使用 Docker CLI

您可以使用本地的 MongoDB 實例或適用於 MongoDB 的 Azure Cosmos DB 實例。

使用本機 MongoDB 實例

  1. 執行最新版的映像。

    #!/bin/bash
    
    # Define variables
    # Set the port number based on the framework being used:
    # 8000 for Django, 5000 for Flask
    export PORT=<port-number>  # Replace with actual port (e.g., 8000 or 5000)
    
    # Set your computer''s IP address (replace with actual IP)
    export YOUR_IP_ADDRESS=<your-computer-ip-address>  # Replace with actual IP address
    
    # Run the Docker container with the required environment variables
    docker run --rm -it \
      --publish "$PORT:$PORT" \
      --publish 27017:27017 \
      --add-host "mongoservice:$YOUR_IP_ADDRESS" \
      --env CONNECTION_STRING=mongodb://mongoservice:27017 \
      --env DB_NAME=restaurants_reviews \
      --env COLLECTION_NAME=restaurants_reviews \
      --env SECRET_KEY="supersecretkeythatispassedtopythonapp" \
      msdocspythoncontainerwebapp:latest
    
    # PowerShell syntax
    # Define variables
    # Set the port number based on the framework being used:
    # 8000 for Django, 5000 for Flask
    $PORT = "your_port_number"  # Replace with your actual port number
    $YOUR_IP_ADDRESS = "your_ip_address"  # Replace with your actual IP address
    
    # Run the Docker container with the required environment variables
    docker run --rm -it `
        --publish "${PORT}:${PORT}" `
        --publish 27017:27017 `
        --add-host "mongoservice:$YOUR_IP_ADDRESS" `
        --env CONNECTION_STRING="mongodb://mongoservice:27017" `
        --env DB_NAME="restaurants_reviews" `
        --env COLLECTION_NAME="restaurants_reviews" `
        --env SECRET_KEY="supersecretkeythatispassedtopythonapp" `
        msdocspythoncontainerwebapp:latest 
    

    使用適用於 MongoDB 的 Azure Cosmos DB 實例

    #!/bin/bash
    # PORT=8000 for Django and 5000 for Flask
    export PORT=<port-number>
    export CONNECTION_STRING="<connection-string>"
    
    docker run --rm -it \
      --publish $PORT:$PORT/tcp \
      --env CONNECTION_STRING=$CONNECTION_STRING \
      --env DB_NAME=restaurants_reviews \
      --env COLLECTION_NAME=restaurants_reviews \
      --env SECRET_KEY=supersecretkeythatyougenerate \
      msdocspythoncontainerwebapp:latest
    
    # PowerShell syntax
    # PORT=8000 for Django and 5000 for Flask
    $PORT=<port-number>
    $ CONNECTION_STRING="<connection-string>"
    
    docker run --rm -it `
      --publish $PORT:$PORT/tcp `
      --env CONNECTION_STRING=$CONNECTION_STRING `
      --env DB_NAME=restaurants_reviews `
      --env COLLECTION_NAME=restaurants_reviews `
      --env SECRET_KEY=supersecretkeythatyougenerate `
      msdocspythoncontainerwebapp:latest
    

    僅針對示範目的顯示傳入敏感性資訊。 您可以使用 Docker 容器檢查命令來檢視連接字串資訊。 處理秘密的另一種方式是使用 Docker 的 BuildKit 功能。

  2. 確認容器正在執行。 在另一個控制台視窗中,執行 docker container ls 命令。

    docker container ls
    

    在清單中查看您的容器 「msdocspythoncontainerwebapp:latest:latest」。。 NAMES請注意輸出和數據PORTS行的數據行。 使用容器名稱來停止容器。

  3. 測試 Web 應用程式。

    移至 “http://127.0.0.1:8000"針對 Django 和 “http://127.0.0.1:5000/"代表 Flask。

  4. 關閉容器。

    docker container stop <container-name>
    

您也可以從映像啟動容器,並使用 Docker Desktop 應用程式加以停止。

後續步驟