在本教學課程系列的這個部分中,您將瞭解如何在本機計算機上建置和執行容器化 Django 或 Flask Python Web 應用程式。 若要儲存此應用程式的數據,您可以使用本機 MongoDB 實例或 適用於 MongoDB 的 Azure Cosmos DB。 本文是 5 部分教學課程系列的第 2 部分。 你應該先完成 第一部分 再開始這篇文章。
以下服務圖重點介紹本文涵蓋的本地元件。 在本文中,你也會學習如何使用 Azure Cosmos DB for MongoDB,搭配本地 Docker 映像檔,而非本地 MongoDB 實例。
複製或下載範例 Python 應用程式
在本節中,您會複製或下載用來建置 Docker 映像的範例 Python 應用程式。 您可以選擇 Django 或 Flask Python Web 應用程式。 如果您有自己的 Python Web 應用程式,您可以選擇改用。 如果您使用自己的 Python Web 應用程式,請確定您的應用程式在根資料夾中有 Dockerfile ,而且可以連線到 MongoDB 資料庫。
使用下列其中一個命令,將 Django 或 Flask 存放庫複製到本機資料夾:
前往您已複製的儲存庫根資料夾。
建置 Docker 映像
在本節中,您會使用 Visual Studio Code 或 Azure CLI 為 Python Web 應用程式建置 Docker 映像。 Docker 映射包含 Python Web 應用程式、其相依性和 Python 運行時間。 你從定義映像內容和行為的 Docker 檔案 建立 Docker 映像檔。 Dockerfile 位於您複製或下載的範例應用程式的根資料夾中(或自行提供)。
小提示
如果您不熟悉 Azure CLI,請參閱 開始使用 Azure CLI 以瞭解如何在本機下載並安裝 Azure CLI,或如何在 Azure Cloud Shell 中執行 Azure CLI 命令。
要使用 Docker CLI 建立 Docker 映像檔,你需要 Docker。 安裝好 Docker 後,打開終端機視窗,進入範例資料夾。
備註
本節中的步驟需要 Docker 精靈才能執行。 在某些安裝環境中,例如在 Windows 上,你必須先開啟 Docker Desktop,它會啟動常駐程式,然後你才能繼續。
在範例應用程式的根資料夾中執行下列命令,確認 Docker 可供存取。
docker如果在執行此命令之後,您會看到 Docker CLI 的說明,Docker 是可存取的。 否則,請確保已安裝 Docker 並且您的 shell 可以存取 Docker CLI。
使用 Docker build 命令建置 Python Web 應用程式的 Docker 映像。
命令的一般形式為
docker build --rm --pull --file "<path-to-project-root>/Dockerfile" --label "com.microsoft.created-by=docker-cli" --tag "<container-name>:latest" "<path-to-project-root>"。如果您位於專案的根資料夾,請使用下列命令來建置 Docker 映像。 命令結尾的點 (“.”) 是指命令執行所在的目前目錄。 若要強制重建,請新增
--no-cache。備註
範例庫使用 Python 3.8。 如果你要自己建立 Dockerfile,請使用支援的 Python 版本,例如 3.12 或 3.13。 請參閱 Python 版本支援以了解目前支援的版本。
#!/bin/bash docker build --rm --pull \ --file "Dockerfile" \ --label "com.microsoft.created-by=docker-cli" \ --tag "msdocspythoncontainerwebapp:latest" \ .使用 Docker images 命令確認映像已順利建置。
docker images此命令會依據倉庫名稱、標籤和建立日期傳回映像清單,以及其他映像特性。
此時,您有一個名為「msdocspythoncontainerwebapp」的本機 Docker 映像檔,其標籤為「latest」。 標籤有助於定義版本詳細數據、預定用途、穩定性和其他相關信息。 如需詳細資訊,請參閱容器映像的標記和版本控制建議。
備註
你也可以查看你從 VS Code 建立的映像檔,或直接使用 Docker CLI 透過 Docker Desktop 應用程式製作的影像。
設定 MongoDB
你的Python網頁應用程式需要一個 MongoDB 資料庫和一個名為 restaurants_reviews 的集合來儲存資料。 在本教學課程中,您會使用 MongoDB 的本機安裝和 適用於 MongoDB 的 Azure Cosmos DB 實例來建立和存取資料庫和集合。
這很重要
請勿使用您在生產環境中使用的 MongoDB 資料庫。 在此教學中,請將其中一個 MongoDB 實例的 MongoDB 連線字串儲存到環境變數中。 任何能檢查您容器的人——例如使用 docker inspect——都能看到這個連線字串。
本機 MongoDB
使用 Azure CLI 建立 MongoDB 的本地實例。
如果 MongoDB 還沒安裝,請安裝它。
要檢查是否安裝了 MongoDB,請使用 MongoDB Shell(mongosh)。 如果以下指令無效,您可能需要明確 安裝 mongosh 或 將 mongosh 連接到你的 MongoDB 伺服器。
使用下列命令來開啟 MongoDB 殼層,並取得 MongoDB 殼層和 MongoDB 伺服器的版本:
mongosh小提示
若要只傳回安裝在系統上的 MongoDB 伺服器版本,請關閉並重新開啟 MongoDB 殼層,並使用下列命令:
mongosh --quiet --exec 'db.version()'在某些設定中,您也可以直接在命令提示字元中啟動 Mongo 服務。
mongod --version
編輯資料夾中的
\MongoDB\Server\8.0\bin檔案,並將電腦的本機 IP 位址新增至bindIP密鑰。備註
設定檔路徑依作業系統及 MongoDB 版本而異。 在 macOS 上,可以找
/usr/local/etc/mongod.conf或/opt/homebrew/etc/mongod.conf。 在 Linux 上,請檢查/etc/mongod.conf。bindipMongoD 組態檔中的金鑰會定義 MongoDB 接聽用戶端連線的主機名和 IP 位址。 新增您本地開發電腦的當前IP。 在 Docker 容器中本機執行的範例 Python Web 應用程式會使用此位址與主計算機通訊。例如,組態檔的一部分看起來應該像這樣:
net: port: 27017 bindIp: 127.0.0.1,<local-ip-address>將變更儲存至此組態檔。
這很重要
您需要系統管理許可權,才能儲存您對這個組態檔所做的變更。
重新啟動 MongoDB 以套用設定檔的變更。
開啟 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」。。
Azure Cosmos DB for MongoDB
現在,利用 Azure CLI 建立一個 Azure Cosmos DB for MongoDB 實例。
備註
在本教學課程系列的第 4 部分中,您會使用適用於 MongoDB 的 Azure Cosmos DB 實例,在 Azure App 服務 中執行 Web 應用程式。
執行下列腳本之前,請以適當的值取代位置、資源群組和適用於 MongoDB 的 Azure Cosmos DB 帳戶名稱(選擇性)。 請用同一個資源群組來管理你在這個教學中建立的所有 Azure 資源,這樣完成後刪除時會比較方便。
指令碼需要幾分鐘的執行時間。
az cosmosdb create這個指令可能需要5到10分鐘完成。
#!/bin/bash
# LOCATION: The Azure region. Use the "az account list-locations -o table" command to find a region near you.
LOCATION='westus'
# RESOURCE_GROUP_NAME: The resource group name, which can contain underscores, hyphens, periods, parenthesis, letters, and numbers.
RESOURCE_GROUP_NAME='msdocs-web-app-rg'
# ACCOUNT_NAME: The Azure Cosmos DB for MongDB account name, which can contain lowercase letters, hyphens, and numbers.
ACCOUNT_NAME='msdocs-cosmos-db-account-name'
# Create a resource group
echo "Creating resource group $RESOURCE_GROUP_NAME in $LOCATION..."
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
# Create a Cosmos account for MongoDB API
echo "Creating $ACCOUNT_NAME. This command may take a while to complete."
az cosmosdb create --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --kind MongoDB
# Create a MongoDB API database
echo "Creating database restaurants_reviews"
az cosmosdb mongodb database create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --name restaurants_reviews
# Create a MongoDB API collection
echo "Creating collection restaurants_reviews"
az cosmosdb mongodb collection create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --database-name restaurants_reviews --name restaurants_reviews
# Get the connection string for the MongoDB database
echo "Get the connection string for the MongoDB account"
az cosmosdb keys list --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --type connection-strings
echo "Copy the Primary MongoDB Connection String from the list above"
腳本完成後,將最後指令輸出的 Primary MongoDB 連接字串 複製到你的剪貼簿或其他位置。
{
"connectionStrings": [
{
"connectionString": ""mongodb://msdocs-cosmos-db:pnaMGVtGIRAZHUjsg4GJBCZMBJ0trV4eg2IcZf1TqV...5oONz0WX14Ph0Ha5IeYACDbuVrBPA==@msdocs-cosmos-db.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@msdocs-cosmos-db@"",
"description": "Primary MongoDB Connection String",
"keyKind": "Primary",
"type": "MongoDB"
},
...
]
}
完成上一個步驟之後,您有一個適用於 MongoDB 的 Azure Cosmos DB 連接字串,格式 mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>為 、名為 restaurants_reviews的資料庫,以及名為 的 restaurants_reviews集合。
如需如何使用 Azure CLI 建立適用於 MongoDB 的 Cosmos DB 帳戶和建立資料庫和集合的詳細資訊,請參閱 使用 Azure CLI 建立適用於 Azure Cosmos DB 的 MongoDB 資料庫和集合。 您也可以使用 PowerShell、VS Code Azure 資料庫延伸模組和 Azure 入口網站。
小提示
在 VS Code Azure 資料庫擴充功能中,您可以以滑鼠右鍵按兩下 MongoDB 伺服器並取得連接字串。
在本機上的容器中執行映像檔
您現在已準備好在本機上執行 Docker 容器,方法是使用本機的 MongoDB 執行個體,或使用適用於 MongoDB 的 Cosmos DB 執行個體。 在這部分教學中,你會學習如何使用 VS Code 或 Azure CLI 在本地執行映像檔。 範例應用程式期望透過環境變數傳遞 MongoDB 連線資訊。 有多種方法可以將環境變數在本地傳遞到容器。 每種方法在安全性方面都有優缺點。 避免在容器內的程式碼中簽入或留下敏感資訊。
備註
當你將網頁應用程式部署到 Azure 時,網頁應用程式會從設定為 App Service 配置的環境值中取得連線資訊。 針對地方發展環境情境的修改均不適用。
MongoDB 本機
使用下列命令搭配 MongoDB 的本機實例,在本機執行 Docker 映像。
執行最新版的映像。
#!/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" \ --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確認容器正在執行。 在另一個控制台視窗中,執行 docker container ls 命令。
docker container ls你在清單中看到你的容器
msdocspythoncontainerwebapp:latest。NAMES請注意輸出和數據PORTS行的數據行。 使用容器名稱來停止容器。測試 Web 應用程式。
如需 Django,請前往
http://127.0.0.1:8000;如需 Flask,請前往http://127.0.0.1:5000/。關閉容器。
docker container stop <container-name>
Azure Cosmos DB for MongoDB
使用下列命令搭配 Azure Cosmos DB for MongoDB 實例,在 Azure 中執行 Docker 映像。
執行最新版的映像。
#!/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為了示範,這個範例展示了如何傳遞敏感資訊。 你可以使用 docker container inspect 指令檢查容器,以查看連線字串相關資訊。 處理秘密的另一種方式是使用 Docker 的 BuildKit 功能。
開啟一個新的主控台視窗,並執行以下 docker container ls 指令以確認容器是否正在運行。
docker container ls你在清單中看到你的容器
msdocspythoncontainerwebapp:latest。NAMES請注意輸出和數據PORTS行的數據行。 使用容器名稱來停止容器。測試 Web 應用程式。
如需 Django,請前往
http://127.0.0.1:8000;如需 Flask,請前往http://127.0.0.1:5000/。關閉容器。
docker container stop <container-name>
你也可以從映像檔啟動容器,然後透過 Docker Desktop 應用程式停止它。