Share via


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

本文是如何將容器化和部署容器化 Python Web 應用程式的教學課程的一部分,以 Azure App 服務。 App Service 可讓您執行容器化 Web 應用程式,並透過 Docker Hub、Azure Container Registry 和 Visual Studio Team Services 的持續整合/持續部署 (CI/CD) 功能進行部署。 在本教學課程的這個部分中,您將瞭解如何在本機建置和執行容器化的 Python Web 應用程式。 此步驟是選擇性的,不需要將範例應用程式部署至 Azure。

在您的開發環境中本機執行 Docker 映像需要設定,才能將部署至 Azure。 將其視為可讓未來開發週期更容易的投資,特別是當您超越範例應用程式並開始建立自己的 Web 應用程式時。 若要部署 DjangoFlask 的範例應用程式,您可以略過此步驟,並移至本教學課程中的下一個步驟。 部署至 Azure 之後,您一律可以傳回 ,並逐步執行這些步驟。

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

A screenshot of the Tutorial - Containerized Python App on Azure with local part highlighted.

1.複製或下載範例應用程式

複製存放庫:

# 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

然後瀏覽至該資料夾:

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

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

2.建置 Docker 映射

如果您使用其中一個適用於 DjangoFlask 的架構範例應用程式,則會設定為 go。 如果您使用自己的範例應用程式,請查看範例應用程式的設定方式,特別是 根目錄中的 Dockerfile

這些指示需要 Visual Studio CodeDocker 擴充功能。 移至您複製或下載的範例資料夾,並使用 命令 code .開啟 VS Code。

注意

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

指示 Screenshot
開啟 Docker 擴充功能。

如果 Docker 擴充功能回報錯誤「無法連線」,請確定 已安裝並執行 Docker 。 如果這是您第一次使用 Docker,您可能不會有任何容器、映射或連線的登錄。
A screenshot showing how to open the Docker extension in Visual Studio Code.
建置映像。
  • 在顯示項目檔的專案總管中,以滑鼠右鍵按兩下 Dockerfile ,然後選取 [ 建置映射...]。

  • 或者,您可以使用命令選擇區 (F1Ctrl+Shift+P) 並輸入 “Docker Images: Build Images” 來叫用命令。

如需 Dockerfile 語法的詳細資訊,請參閱 Dockerfile 參考
A screenshot showing how to build the Docker image in Visual Studio Code.
確認映像已建置。
  • 移至 Docker 擴充功能的 IMAGES 區段。

  • 尋找最近建置的映像。 容器映像的名稱是 「msdocspythoncontainerwebapp」,其設定於 .vscode/tasks.json 檔案中

A screenshot showing how to confirm the built image in Visual Studio Code.

此時,您已在本機建置映像。 您建立的映像名稱為 「msdocspythoncontainerwebapp」,並標記 「latest」。 標籤是定義版本資訊、預定用途、穩定性或其他資訊的方法。 如需詳細資訊,請參閱用於標記和版本設定容器映像的 建議。

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

3.設定 MongoDB

在本教學課程中,您需要名為 restaurants_reviews 的 MongoDB 資料庫,以及名為 restaurants_reviews集合。 本節中的步驟說明如何使用 MongoDB 或 Azure Cosmos DB for MongoDB 的本機安裝來建立及存取資料庫和集合。

重要

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

步驟 1:如果尚未安裝 MongoDB,請加以安裝

您可以使用 MongoDB 殼層 (mongosh) 來檢查 MongoDB 的安裝。

  • 下列命令會輸入殼層,併為您提供安裝在系統上的 mongosh 和 mongoDB 伺服器版本:

    mongosh
    
  • 下列命令只會提供安裝在系統上的 MongoDB 伺服器版本:

    mongosh --quiet --exec 'db.version()'
    

如果這些命令無法運作,您可能需要明確安裝 mongosh 或將 mongosh 連線到 MongoDB 伺服器。

某些安裝中的替代方法是直接叫用 Mongo 精靈。

mongod --version

步驟 2: 編輯 mongod.cfg 檔案以新增電腦的 IP 位址。

mongod 組態檔有一個bindIp密鑰,可定義 MongoDB 接聽用戶端連線的主機名和 IP 位址。 新增本機開發計算機的目前IP。 在 Docker 容器中本機執行的應用程式範例會與此地址通訊給主計算機。

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

net:
  port: 27017
  bindIp: 127.0.0.1,<local-ip-address>

重新啟動 MongoDB 以挑選組態檔的變更。

步驟 3: 在本機 MongoDB 資料庫中建立資料庫和集合。

將資料庫名稱設定為 「restaurants_reviews」 並將集合名稱設定為 「restaurants_reviews」。 您可以使用 VS Code MongoDB 擴充功能MongoDB Shell (mongosh)或任何其他 MondoDB 感知工具來建立資料庫和集合。

針對 MongoDB 殼層,以下是建立資料庫和集合的範例命令:

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

此時,您的本機 MongoDB 連接字串 為 「mongodb://127.0.0.1:27017/」,資料庫名稱為 「restaurants_reviews」,而集合名稱為 「restaurants_reviews」。

4.在容器中本機執行映射

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

注意

部署至 Azure 時,Web 應用程式會從設定為 App Service 組態設定的環境值取得連線資訊,而且不會套用本機開發環境案例的修改。

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

如果您使用本機 MongoDB 資料庫:
  • 將的兩個 <YOUR_IP_ADDRESS> 實例取代為您的IP位址。

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

如果您使用適用於 MongoDB 的 Azure Cosmos DB 資料庫:
  • 將的兩個實例<CONNECTION_STRING>取代為適用於 MongoDB 的 Azure Cosmos DB 連接字串。
docker.dockerPath設定範本所使用的組態設定。 若要設定 docker.dockerPath,請開啟 VS Code 命令選擇區Ctrl+Shift+P),輸入 [喜好設定:開啟工作區 設定],然後在 [搜尋設定] 方塊中輸入 “docker.dockerPath”。 針對設定的值輸入 「docker」 (不含引號)。

注意

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

A screenshot showing the settings.json file Visual Studio Code.
執行映像。
  • 在 Docker 延伸模組的 IMAGES 區段中,尋找建置的映像。

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

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

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

重要

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

A screenshot showing how to run a Docker container in Visual Studio Code.
確認容器正在執行。
  • 在 Docker 擴充功能的 [容器] 區段中,尋找容器。

  • 展開 [ 個別容器] 節點,並確認 “msdocspythoncontainerwebapp” 正在執行。 如果容器名稱正在執行,您應該會看到容器名稱旁的綠色三角形符號。

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
以滑鼠右鍵按兩下容器名稱,然後選取 [在瀏覽器中開啟],以測試 Web 應用程式。

瀏覽器會以 “http://127.0.0.1:8000"適用於 Django 或 “http://127.0.0.1:5000/"代表 Flask。
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
停止容器。
  • 在 Docker 擴充功能的 [容器] 區段中,尋找執行中的容器。

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

A screenshot showing how to stop a running Docker container in Visual Studio Code.

提示

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

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

後續步驟