容器中的 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# 擴充功能提示您新增建置與偵錯所需的資產,並選擇是 (Yes)。您也可以開啟命令選擇區 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 並使用 .NET: Generate Assets for Build and Debug 命令。
-
開啟命令選擇區 (⇧⌘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 工作 (Tasks) 用於建置與執行容器(包含偵錯與發行設定,總共四個工作),以及一個用於在偵錯模式下啟動容器的偵錯設定。
建置應用程式
-
開啟終端機提示字元 (⌃` (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... 命令。
-
開啟容器總管 (Container Explorer) 並確認新映像檔已顯示在 Images 樹狀目錄中

測試服務容器
-
右鍵點選在上一步中建置的映像檔,並選擇 Run 或 Run Interactive。容器應會啟動,且您應該能在容器總管的「Containers」檢視中看到它

-
開啟網頁瀏覽器並前往 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。當您對映像檔執行 Run 命令時,VS Code 會嘗試為主機連接埠使用與容器連接埠相同的連接埠號碼。這使得使用者能輕易記住與容器通訊所需的連接埠,但如果該主機連接埠已被佔用,則此方式將無法運作。
如果您無法在瀏覽器中看到來自容器的資料,請確保
docker run命令未報告任何錯誤(請查看終端機視窗中的命令輸出)。您也可以透過在容器總管中右鍵點選容器並選擇 Inspect,來驗證容器正在使用哪個主機連接埠。這將會開啟一個詳細描述該容器的 JSON 文件。請搜尋PortBindings項目,例如"PortBindings": { "5000/tcp": [ { "HostIp": "", "HostPort": "5000" } ] }, -
測試完成後,在容器總管中右鍵點選容器並選擇 Stop。
在容器中偵錯
當 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中的中斷點。
您可以透過變更 docker-run: debug 工作(定義於 .vscode/tasks.json 檔案中)所使用的 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
}
後續步驟
完成!現在容器已準備就緒,您可能想要: