參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

容器中的 Python

在本教程中,您將學習如何:

  • 建立一個描述簡單 Python 容器的 Dockerfile 檔案。
  • 構建、執行和驗證 DjangoFlask 或通用 Python 應用程式的功能。
  • 除錯在容器中執行的應用程式。

先決條件

建立一個 Python 專案

如果您還沒有 Python 專案,請按照教程Python 入門進行操作。

注意:如果您想將一個完整的 Django 或 Flask Web 應用程式容器化,您可以從以下示例之一開始:

注意:對於本教程,請務必使用示例儲存庫的 tutorial 分支。

在驗證您的應用程式執行正常後,您現在可以容器化您的應用程式。

向專案新增 Docker 檔案

  1. 在 VS Code 中開啟專案資料夾。

  2. 開啟命令面板⇧⌘P (Windows, Linux Ctrl+Shift+P))並選擇容器:向工作區新增 Docker 檔案...

    Add Dockerfile to a Python project

  3. 當提示您選擇應用程式型別時,選擇 Python: DjangoPython: FlaskPython: General 作為應用程式型別。對於本教程,我們將重點關注 Python: General 的情況,但也會包括 Django 和 Flask 的註釋。

  4. 輸入應用程式入口點的相對路徑。這不包括您開始的工作區資料夾。如果您按照Python 入門教程建立了一個帶有 hello.py 的 Python 應用程式,請選擇該應用程式。

    Django:選擇 manage.py(根資料夾)或 subfolder_name/manage.py。請參閱官方 Django 文件

    Flask:選擇您建立 Flask 例項的路徑。請參閱官方 Flask 文件

    提示:您也可以輸入資料夾名稱的路徑,只要此資料夾包含 __main__.py 檔案即可。

  5. 選擇埠號。我們建議選擇 1024 或更高的埠,以減輕以 root 使用者身份執行的安全問題。任何未使用的埠都可以,但 Django 和 Flask 使用標準預設埠。

    Django:預設埠 8000。

    Flask:預設埠 5000。

  6. 當提示您是否包含 Docker Compose 時,如果您不需要 Docker Compose 檔案,請選擇。如果您選擇,您需要驗證 Dockerfilewsgi.py 檔案的路徑,以便成功執行 Compose Up 命令。Compose 通常用於同時執行多個容器。

  7. 有了所有這些資訊,容器工具擴充套件會建立以下檔案:

    • 一個 Dockerfile。要了解有關此檔案中 IntelliSense 的更多資訊,請參閱概述

    • 一個 .dockerignore 檔案,透過排除不需要的檔案和資料夾(如 .git.vscode__pycache__)來減小映象大小。

    • 如果您正在使用 Docker Compose,則會生成一個 docker-compose.ymldocker-compose.debug.yml 檔案。

    • 如果尚不存在,則會建立一個 requirements.txt 檔案,用於捕獲所有應用程式依賴項。

    重要提示:要使用我們的設定,Python 框架(Django/Flask)和 Gunicorn 必須包含requirements.txt 檔案中。如果虛擬環境/主機已經安裝了這些先決條件,並且應該與容器環境相同,請透過在終端中執行 pip freeze > requirements.txt 來確保應用程式依賴項已移植。這將覆蓋您當前的 requirements.txt 檔案。

(可選)向映象新增環境變數

此步驟不是必需的,但其目的是幫助您瞭解如何新增需要在容器環境中設定的環境變數。

容器工具擴充套件透過使用 IntelliSense 提供自動完成和上下文幫助來幫助您編寫 Dockerfile。要檢視此功能的操作:

  1. 開啟 Dockerfile

  2. EXPOSE 語句下方,鍵入 ⌃Space (Windows, Linux Ctrl+Space) 以觸發 IntelliSense 並滾動到 ENV

    Adding environment variable to Dockerfile

  3. TabEnter 完成語句,然後將 key 設定為變數名,並設定 value

有關在 Dockerfile 中設定和使用環境變數的更多資訊,請參閱 Docker 文件中的 ENV 指令 和 環境替換 部分。

Django 和 Flask 應用程式的 Gunicorn 修改

為了給 Python Web 開發人員提供一個很好的起點,我們選擇使用 Gunicorn 作為預設 Web 伺服器。由於它在預設 Dockerfile 中被引用,因此它作為依賴項包含在 requirements.txt 檔案中。如果您在 requirements.txt 中沒有看到它,請執行 pip install gunicorn,然後執行 pip freeze > requirements.txt 以重新生成 requirements.txt 檔案。

  • Django:要使用 Gunicorn,它必須繫結到一個應用程式可呼叫物件(應用程式伺服器用於與您的程式碼通訊的物件)作為入口點。此可呼叫物件在 Django 應用程式的 wsgi.py 檔案中宣告。為了實現此繫結,Dockerfile 的最後一行表示

    CMD ["gunicorn", "--bind", "0.0.0.0:8000", "{workspace_folder_name}.wsgi"]
    

    如果您的專案不遵循 Django 的預設專案結構(即,一個工作區資料夾和一個名為與工作區相同的子資料夾中的 wsgi.py 檔案),您必須覆蓋 Dockerfile 中的 Gunicorn 入口點以找到正確的 wsgi.py 檔案。

    如果您的 wsgi.py 檔案在根資料夾中,則上述命令的最後一個引數將是 "wsgi"。在子資料夾中,引數將是 "subfolder1_name.subfolder2_name.wsgi"

  • Flask:要使用 Gunicorn,它必須繫結到一個應用程式可呼叫物件(應用程式伺服器用於與您的程式碼通訊的物件)作為入口點。此可呼叫物件與您建立的 Flask 例項的檔案位置變數名對應。根據官方 Flask 文件,使用者通常以這種方式在主模組或其包的 __init__.py 檔案中建立 Flask 例項

    from flask import Flask
    app = Flask(__name__) # Flask instance named app
    

    為了實現此繫結,Dockerfile 的最後一行表示

    CMD ["gunicorn", "--bind", "0.0.0.0:5000", "{subfolder}.{module_file}:app"]
    

    在執行容器:向工作區新增 Docker 檔案... 命令期間,您配置了 Flask 例項的路徑,但是,容器工具擴充套件假定您的 Flask 例項變數名為 app。如果不是這種情況,您必須更改 Dockerfile 中的變數名。

    如果您的主模組位於根資料夾中,檔名為 main.py,並且 Flask 例項變數名為 myapp,則上述命令的最後一個引數將是 "main:myapp"。在子資料夾中,引數將是 "subfolder1_name.subfolder2_name.main:myapp"

構建、執行和除錯容器

容器:向工作區新增 Docker 檔案... 命令會自動建立一個 Docker 啟動配置,以除錯模式構建和執行您的容器。要除錯您的 Python 應用程式容器:

  1. 導航到包含應用程式啟動程式碼的檔案,並設定一個斷點。

  2. 導航到執行和除錯並選擇容器:Python - 通用容器:Python - Django容器:Python - Flask,視情況而定。

    Selected container debug configuration

  3. 使用 F5 鍵開始除錯。

    • 容器映象正在構建。
    • 容器正在執行。
    • Python 偵錯程式在斷點處停止。
  4. 單步執行此行一次。

  5. 準備就緒後,按繼續。

容器工具擴充套件將您的瀏覽器啟動到一個隨機對映的埠

Django website launches

提示:要修改您的 Docker 構建設定,例如更改映象標籤,請在 docker-build 任務的 dockerBuild 屬性下導航到 .vscode -> tasks.json。在檔案中使用 IntelliSense(⌃Space (Windows, Linux Ctrl+Space))以顯示所有其他有效指令。

使用容器瀏覽器

容器瀏覽器提供互動式體驗來檢查和管理容器資產,例如容器、映象等。要檢視示例:

  1. 導航到容器瀏覽器。

  2. 容器選項卡中,右鍵單擊您的容器並選擇檢視日誌

    Viewing the logs of a container

  3. 輸出將顯示在終端中。

在 Azure 中構建映象

您可以使用命令Azure 容器登錄檔:在 Azure 中構建映象來構建一個映象,然後您可以將其部署到 Azure 應用服務或 Azure 容器應用。

  1. 安裝 Azure 資源擴充套件。開啟命令面板⇧⌘P (Windows, Linux Ctrl+Shift+P))並搜尋命令Azure:登入。如果您沒有 Azure 帳戶,您可以註冊免費試用版

  2. 有兩種方法可以呼叫 Azure 中的構建命令。您可以右鍵單擊 Dockerfile,然後選擇在 Azure 中構建映象。您還可以使用命令面板⇧⌘P (Windows, Linux Ctrl+Shift+P))並搜尋命令Azure 容器登錄檔:在 Azure 中構建映象

    Invoke the command Build Image in Azure

  3. 為構建的映象選擇名稱和標籤。您將使用它在容器登錄檔中識別它。

    Choose the name and tag for the built image.

  4. 選擇您要使用的 Azure 訂閱。

  5. 選擇一個現有的 Azure 容器登錄檔,或建立一個新的。當您建立一個新的登錄檔時,系統會要求您提供名稱、資源組、位置和定價選項,例如基本、標準或高階。您可以在定價 - 容器登錄檔中瞭解這些選項的成本。

  6. 指定基礎作業系統,Linux 或 Windows。此選擇必須與 Dockerfile 一致。

    Choose the base OS for the built image

構建映象的過程可能需要幾分鐘。您可以在終端中跟蹤進度。如果遇到錯誤(Error: failed to download context.),請嘗試在容器登錄檔上使用重新整理選項,然後請求另一次構建。在重新構建之前,手動刪除舊映象。

部署到 Azure 應用服務或 Azure 容器應用

容器映象構建完成後,它應該會出現在容器登錄檔中,帶有您指定的標籤。現在它已構建完成,您可以將其部署到 Azure 應用服務或 Azure 容器應用。Azure 應用服務擴充套件推薦用於部署到 Azure 應用服務,Azure 容器應用擴充套件是部署到 Azure 容器應用所必需的。如果您安裝Azure 工具擴充套件包,您可以獲得這兩者,其中包含用於各種 Azure 開發場景的工具包。

  1. 右鍵單擊映象標籤並選擇部署映象到 Azure 應用服務部署映象到 Azure 容器應用

    Deploy image to Azure App Service

  2. 提供網站的名稱。這必須是一個唯一的名稱,對於 Django 應用程式,它還必須在 settings.py 檔案中的 ALLOWED_HOSTS 列表中列為有效的 hostname。

  3. 提供資源組、位置和應用服務計劃。如果您剛開始,可以選擇免費計劃。

  4. 映象正在部署;該過程可能需要幾分鐘。部署完成後,會出現一個通知,其中包含一個按鈕,您可以使用它訪問該站點。您還可以使用站點的地址 {appname}.azurewebsites.net,其中 {appname} 是您建立時給定的名稱。如果一開始不起作用,請在幾分鐘後重試。前幾次嘗試超時或返回錯誤並不少見。這只是意味著應用服務尚未準備好接收請求。

  5. 對應用程式程式碼進行一個小更改,使其在其中一個頁面上可見,然後儲存檔案。

  6. 使用 Azure 圖示開啟資源檢視,並展開您的訂閱節點以找到您在上一步中部署的應用服務。

  7. 右鍵單擊應用服務節點並檢視可用選項。選擇部署到 Web 應用,然後指定您的應用程式資料夾以進行部署。

    Deploy to Web App

    當警告此操作將覆蓋以前的部署時,選擇部署以確認。

    這可能需要幾分鐘;您可以在終端視窗中監控進度。完成後,將提供一個訪問該站點的按鈕。

    Browse website button

    使用該按鈕並驗證您的更改是否反映在站點上。

恭喜,您已在 VS Code 中使用 Python 建立並部署了一個託管在雲端並在網際網路上執行的網站!

釋放資源

Azure 門戶中,刪除資源組以釋放您在此練習期間建立的所有資源。

後續步驟

你已完成!現在你的容器已準備就緒,你可能想