容器中的 ASP.NET Core
在本指南中,您將學習如何
- 建立一個
Dockerfile
檔案,描述一個簡單的 .NET Core 服務容器。 - 建置、執行並驗證服務的功能。
- 偵錯以容器形式執行的服務。
先決條件
- 必須安裝 Docker 和 VS Code Docker 擴充功能,如概觀中所述。
- 對於 .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)),並使用 [Docker: 將 Docker 檔案新增至工作區...] 命令
-
當提示輸入應用程式平台時,請使用 [.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
將環境變數新增至映像
您可以使用 Docker 擴充功能來撰寫 Docker 檔案。此擴充功能提供完成項和內容相關的說明。若要查看這些功能,請按照下列步驟將環境變數新增至您的服務映像
-
開啟
Dockerfile
檔案。 -
使用
ENV
指示將環境變數新增至服務容器映像。指示應放置在Dockerfile
的base
階段 (檔案中的第一個階段)。將ASPNETCORE_URLS
變數設定為http://*:5000
請注意 Docker 擴充功能如何列出所有可用的 Dockerfile 指示,並描述語法。
Docker 擴充功能使用
Dockerfile
的base
階段來建立服務容器映像的偵錯版本。將ASPNETCORE_URLS
環境變數定義放在base
階段,讓此變數在容器映像的偵錯和發行版本中都可用。 -
儲存
Dockerfile
檔案。
建置映像
-
開啟 [命令面板] (⇧⌘P (Windows、Linux Ctrl+Shift+P)),並發出 [Docker 映像: 建置映像...] 命令。
-
開啟 Docker 總管,並確認新的映像在 [映像] 樹狀結構中可見
測試服務容器
-
在先前步驟中建置的映像上按一下滑鼠右鍵,然後選擇 [執行] 或 [互動式執行]。容器應該會啟動,而且您應該可以在 Docker 總管的 [容器] 窗格中看到它
-
開啟 Web 瀏覽器並瀏覽至 https://127.0.0.1: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
命令沒有報告任何錯誤 (查看終端機視窗中的命令輸出)。您也可以藉由在 Docker 總管中按一下滑鼠右鍵並選擇 [檢查],來驗證容器正在使用哪個主機連接埠。這會開啟一個 JSON 文件,詳細描述容器。搜尋PortBindings
元素,例如"PortBindings": { "5000/tcp": [ { "HostIp": "", "HostPort": "5000" } ] },
-
完成測試後,在 Docker 總管中按一下滑鼠右鍵,然後選擇 [停止]。
在容器中偵錯
當 Docker 檔案新增至應用程式時,Docker 擴充功能也會新增 VS Code 偵錯工具組態,以便在服務於容器內執行時進行偵錯。此擴充功能會自動偵測服務正在使用的通訊協定和連接埠,並將瀏覽器指向服務,但我們需要告訴它要使用的 URL 路徑。
-
在
Controllers/WeatherForecastController.cs
檔案的Get()
方法的程式碼開頭設定中斷點。 -
開啟
.vscode/launch.json
檔案,並尋找 `Docker .NET Core Launch` 偵錯組態。 -
將
dockerServerReadyAction
新增至Docker .NET Core Launch
組態"dockerServerReadyAction": { "uriFormat": "%s://127.0.0.1:%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
}
後續步驟
您已完成!現在您的容器已就緒,您可能想要