在容器中託管 ASP.NET Core
在本指南中,您將學習如何
- 建立一個
Dockerfile檔案,該檔案描述了一個簡單的 .NET Core 服務容器。 - 生成、執行並驗證服務的函式。
- 除錯正在作為容器執行的服務。
先決條件
- 必須按照 概述 中的說明安裝 Docker 和 VS Code Container Tools 擴充套件。
- 對於 .NET 開發,請安裝 .NET SDK。
- Microsoft C# for Visual Studio Code 擴充套件。
建立 .NET Web API 專案
-
為專案建立一個資料夾。
-
在專案資料夾中開啟開發人員命令提示符並初始化專案
dotnet new webapi --no-https
向專案新增 Docker 檔案
-
在 VS Code 中開啟專案資料夾。
-
等待 C# 擴充套件提示您新增生成和除錯所需的資產,然後選擇“是”。您還可以開啟命令面板((⇧⌘P (Windows, Linux Ctrl+Shift+P))),然後使用“.NET: 生成生成和除錯所需資產”命令。
-
開啟命令面板((⇧⌘P (Windows, Linux Ctrl+Shift+P))),然後使用“Containers: Add Docker Files to Workspace...”命令

-
在提示輸入應用程式平臺時,請使用“.NET: ASP.NET Core”。
-
在提示選擇作業系統時,請選擇“Windows”或“Linux”。
僅當您的 Docker 安裝配置為使用 Windows 容器時,Windows 才適用。
-
系統會詢問您是否要新增 Docker Compose 檔案。在本教程中,我們不使用 Docker Compose,因此“是”和“否”答案都可以。
-
將應用程式終結點埠更改為
5000。 -
Dockerfile和.dockerignore檔案已新增到工作區。該擴充套件還會建立一組用於生成和執行容器的VS Code 任務(包括除錯和釋出配置,總共四個任務),以及一個用於在除錯模式下啟動容器的除錯配置。
生成應用程式
-
開啟終端提示符((⌃` (Windows, Linux Ctrl+`))。
-
發出
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 檔案。該擴充套件提供自動完成和上下文幫助。要檢視這些功能,請透過以下步驟向服務映像新增環境變數
-
開啟
Dockerfile檔案。 -
使用
ENV指令將環境變數新增到服務容器映像。該指令應放置在Dockerfile的base階段(檔案中的第一個階段)。將ASPNETCORE_URLS變數設定為http://*:5000
請注意,Container Tools 擴充套件如何列出所有可用的 Dockerfile 指令並描述其語法。
Container Tools 擴充套件使用
Dockerfile的base階段來建立服務的容器映像的除錯版本。將ASPNETCORE_URLS環境變數定義放在base階段,以便在容器映像的除錯和釋出版本中都可用此變數。 -
儲存
Dockerfile檔案。
生成映像
-
開啟命令面板((⇧⌘P (Windows, Linux Ctrl+Shift+P))),併發出“Container Images: Build Image...”命令。
-
開啟容器資源管理器,並驗證新映像是否顯示在“映像”樹中

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

-
開啟 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" } ] }, -
測試完成後,右鍵單擊容器資源管理器中的容器並選擇“停止”。
在容器中進行除錯
當 Docker 檔案新增到應用程式時,Container Tools 擴充套件還會新增一個VS Code 偵錯程式配置,用於在服務執行時在容器中進行除錯。該擴充套件將自動檢測服務使用的協議和埠,並將瀏覽器指向該服務,但我們需要告訴它使用哪個 URL 路徑。
-
在
Controllers/WeatherForecastController.cs檔案的Get()方法的程式碼開頭設定一個斷點。 -
開啟
.vscode/launch.json檔案並找到Containers: .NET Core Launch除錯配置。 -
將
dockerServerReadyAction新增到Containers: .NET Core Launch配置"dockerServerReadyAction": { "uriFormat": "%s://:%s/WeatherForecast" } -
確保將配置選擇為活動狀態

-
開始除錯((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
}
後續步驟
你已完成!現在你的容器已準備就緒,你可能想