現已釋出!閱讀關於 11 月新增功能和修復的內容。

在容器中託管 ASP.NET Core

在本指南中,您將學習如何

  • 建立一個 Dockerfile 檔案,該檔案描述了一個簡單的 .NET Core 服務容器。
  • 生成、執行並驗證服務的函式。
  • 除錯正在作為容器執行的服務。

先決條件

建立 .NET Web API 專案

  1. 為專案建立一個資料夾。

  2. 在專案資料夾中開啟開發人員命令提示符並初始化專案

    dotnet new webapi --no-https
    

向專案新增 Docker 檔案

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

  2. 等待 C# 擴充套件提示您新增生成和除錯所需的資產,然後選擇“”。您還可以開啟命令面板((⇧⌘P (Windows, Linux Ctrl+Shift+P))),然後使用“.NET: 生成生成和除錯所需資產”命令。

  3. 開啟命令面板((⇧⌘P (Windows, Linux Ctrl+Shift+P))),然後使用“Containers: Add Docker Files to Workspace...”命令

    Add Dockerfile to a .NET project

  4. 在提示輸入應用程式平臺時,請使用“.NET: ASP.NET Core”。

  5. 在提示選擇作業系統時,請選擇“Windows”或“Linux”。

    僅當您的 Docker 安裝配置為使用 Windows 容器時,Windows 才適用。

  6. 系統會詢問您是否要新增 Docker Compose 檔案。在本教程中,我們不使用 Docker Compose,因此“是”和“否”答案都可以。

  7. 將應用程式終結點埠更改為 5000

  8. Dockerfile.dockerignore 檔案已新增到工作區。

    該擴充套件還會建立一組用於生成和執行容器的VS Code 任務(包括除錯和釋出配置,總共四個任務),以及一個用於在除錯模式下啟動容器的除錯配置

生成應用程式

  1. 開啟終端提示符((⌃` (Windows, Linux Ctrl+`))。

  2. 發出 dotnet build 命令以生成應用程式

    PS C:\source\repos\net> dotnet build
    MSBuild version 17.4.0-preview-22470-08+6521b1591 for .NET
      Determining projects to restore...
      All projects are up-to-date for restore.
      net -> C:\source\repos\net\bin\Debug\net7.0\net.dll
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    
    Time Elapsed 00:00:08.96
    

向映像新增環境變數

您可以使用 Container Tools 擴充套件來創作 Docker 檔案。該擴充套件提供自動完成和上下文幫助。要檢視這些功能,請透過以下步驟向服務映像新增環境變數

  1. 開啟 Dockerfile 檔案。

  2. 使用 ENV 指令將環境變數新增到服務容器映像。該指令應放置在 Dockerfilebase 階段(檔案中的第一個階段)。將 ASPNETCORE_URLS 變數設定為 http://*:5000

    Add an environment variable to Docker image

    請注意,Container Tools 擴充套件如何列出所有可用的 Dockerfile 指令並描述其語法。

    Container Tools 擴充套件使用 Dockerfilebase 階段來建立服務的容器映像的除錯版本。將 ASPNETCORE_URLS 環境變數定義放在 base 階段,以便在容器映像的除錯和釋出版本中都可用此變數。

  3. 儲存 Dockerfile 檔案。

生成映像

  1. 開啟命令面板((⇧⌘P (Windows, Linux Ctrl+Shift+P))),併發出“Container Images: Build Image...”命令。

  2. 開啟容器資源管理器,並驗證新映像是否顯示在“映像”樹中

    Verify Docker image exists

測試服務容器

  1. 右鍵單擊上一步生成的映像,然後選擇“執行”或“互動式執行”。容器應啟動,您應該可以在容器資源管理器的“容器”檢視中看到它

    Running service container

  2. 開啟 Web 瀏覽器並導航到 https://:5000/WeatherForecast。您應該會看到天氣資料(JSON 格式),類似於以下內容

    [
        {"date":"2019-11-07T23:31:57.0527092+00:00","temperatureC":4,"temperatureF":39,"summary":"Bracing"},
        {"date":"2019-11-08T23:31:57.0539243+00:00","temperatureC":-19,"temperatureF":-2,"summary":"Freezing"},
        {"date":"2019-11-09T23:31:57.0539269+00:00","temperatureC":2,"temperatureF":35,"summary":"Freezing"},
        {"date":"2019-11-10T23:31:57.0539275+00:00","temperatureC":-4,"temperatureF":25,"summary":"Freezing"},
        {"date":"2019-11-11T23:31:57.053928+00:00","temperatureC":9,"temperatureF":48,"summary":"Bracing"}
     ]
    

    預設情況下,Docker 會為容器的某個埠(容器埠)分配一個隨機選擇的主機埠。在我們的應用程式中,公開的(容器)埠是 5000。當您為映像發出“執行”命令時,VS Code 會嘗試為主機埠和容器埠使用相同的埠號。這使得易於記住要使用哪個埠與容器通訊,但如果主機埠已被使用,則此方法無效。

    如果您在瀏覽器中看不到來自容器的資料,請確保 docker run 命令沒有報告任何錯誤(檢視終端視窗中的命令輸出)。您還可以透過右鍵單擊容器資源管理器中的容器並選擇“檢查”來驗證容器正在使用哪個主機埠。這將開啟一個描述容器詳細資訊的 JSON 文件。搜尋 PortBindings 元素,例如

    "PortBindings": {
      "5000/tcp": [
        {
          "HostIp": "",
          "HostPort": "5000"
        }
      ]
    },
    
  3. 測試完成後,右鍵單擊容器資源管理器中的容器並選擇“停止”。

在容器中進行除錯

當 Docker 檔案新增到應用程式時,Container Tools 擴充套件還會新增一個VS Code 偵錯程式配置,用於在服務執行時在容器中進行除錯。該擴充套件將自動檢測服務使用的協議和埠,並將瀏覽器指向該服務,但我們需要告訴它使用哪個 URL 路徑。

  1. Controllers/WeatherForecastController.cs 檔案的 Get() 方法的程式碼開頭設定一個斷點。

  2. 開啟 .vscode/launch.json 檔案並找到 Containers: .NET Core Launch 除錯配置。

  3. dockerServerReadyAction 新增到 Containers: .NET Core Launch 配置

    "dockerServerReadyAction": {
        "uriFormat": "%s://:%s/WeatherForecast"
    }
    
  4. 確保將配置選擇為活動狀態

    Selected Docker debug configuration

  5. 開始除錯((F5)。

    • 服務容器的除錯版本正在生成並啟動。
    • 瀏覽器開啟以請求新的天氣預報。
    • WeatherForecastController 中的斷點已被命中。

您可以透過更改 .vscode/tasks.json 檔案中定義的 docker-run: debug 任務使用的 Docker 執行選項來使用主機上的特定埠。例如,如果您想使用相同的埠 (5000) 來公開服務,docker-run: debug 任務定義將如下所示

 {
    "type": "docker-run",
    "label": "docker-run: debug",
    "dependsOn": [
        "docker-build: debug"
    ],
    "dockerRun": {
        "ports": [
            { "hostPort": 5000, "containerPort": 5000 }
        ]
    },
    "netCore": {
        "appProject": "${workspaceFolder}/netcorerest.csproj",
        "enableDebugging": true
    }

後續步驟

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

© . This site is unofficial and not affiliated with Microsoft.