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]。
Windows 僅適用於您的 Docker 安裝設定為使用 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 瀏覽器並瀏覽至 http://localhost: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://localhost:%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
}
後續步驟
您已完成!現在您的容器已準備就緒,您可能想要