容器中的 ASP.NET Core
在本指南中,您将学习如何:
- 创建一个
Dockerfile文件描述了一个简单的 .NET Core 服务容器。 - 构建、运行并验证服务的功能。
- 调试以容器形式运行的服务。
先决条件
- 必须按照中所述安装Docker和VS Code Container Tools扩展。概述
- 进行 .NET 开发,请安装 .NET SDK.
- 微软 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文件添加到工作区... 命令:

-
使用.NET: ASP.NET Core当被提示选择应用程序平台时。
-
选择 Windows 或 Linux 当系统提示选择操作系统时。
Windows 仅适用于您的 Docker 安装配置为使用 Windows 容器的情况。
-
系统会询问您是否要添加Docker Compose文件。在这个教程中我们不会使用Docker Compose,所以无论是“是”还是“否”都可以。
-
将应用端点的端口更改为
5000输入:. -
Dockerfile和.dockerignore文件已添加到工作区。该扩展还将创建一个用于构建和运行容器的VS Code 任务集(在调试和发布配置下,总共四个任务),以及一个调试配置用于以调试模式启动容器。
构建应用程序
-
打开终端提示 (⌃` (Windows, Linux Ctrl+`)).
-
问题
dotnet 构建构建应用程序的命令:PS C:\source\repos\net> dotnet build MSBuild 版本 17.4.0-preview-22470-08+6521b1591 用于 .NET 确定要恢复的项目... 所有项目都已是最新的,无需恢复。 net -> C:\source\repos\net\bin\Debug\net7.0\net.dll 构建成功。 0 个警告 0 个错误 已用时间 00:00:08.96
在图像中添加环境变量
您可以使用 Container Tools 扩展来编写 Docker 文件。该扩展提供自动完成和上下文帮助。要查看这些功能,请按照以下步骤为您的服务镜像添加环境变量:
-
打开
Dockerfile文件。 -
使用
环境指令是向服务容器镜像添加一个环境变量。该指令应放置在基础阶段Dockerfile(文件的第一阶段)。设置ASPNETCORE_URLS变量到http://*:5000输入:
注意 Container Tools 扩展如何列出所有可用的 Dockerfile 指令并描述语法。
容器工具扩展使用
基础阶段Dockerfile创建服务的容器镜像调试版本。放置ASPNETCORE_URLS环境变量定义在基础阶段以在容器镜像的调试和发布版本中都可用此变量。 -
保存
Dockerfile文件。
构建镜像
-
打开命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 并执行 容器镜像:构建镜像... 命令。
-
打开容器浏览器,并验证新镜像在镜像树中可见:

测试服务容器
-
右键单击上一步创建的图像并选择“运行”或“交互式运行”。容器应该开始,并且您应该能够在容器资源管理器的“容器”视图中看到它:

-
打开网页浏览器并导航到 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 运行命令(在终端Windows中查看命令输出)。您还可以通过在容器资源管理器中右键单击容器并选择 检查 来验证容器正在使用的主机端口。这将打开一个详细描述容器的JSON文档。搜索端口绑定元素,例如:"端口绑定": { "5000/tcp": [ { "主机IP": "", "主机端口": "5000" } ] }, -
测试完成后,在容器资源管理器中右键单击容器并选择停止。
在容器中调试
当在应用程序中添加Docker文件时,Container Tools扩展也添加了一个VS Code调试器配置,用于在服务运行在容器内时进行调试。扩展会自动检测服务使用的协议和端口,并将浏览器指向该服务,但我们需要告诉它使用什么URL路径。
-
在代码的开头设置一个断点
获取()方法控制器/天气预报控制器.cs文件。 -
打开
.vscode/launch.json文件和查找容器:.NET Core 启动调试配置。 -
添加
docker服务器就绪动作至容器:.NET Core 启动配置:"dockerServerReadyAction": { "uriFormat": "%s://localhost:%s/WeatherForecast" } -
确保配置已设置为活动状态:

-
开始调试 (F5)。
- 服务容器的调试版本构建并启动。
- 浏览器打开以请求新的天气预报。
- 在该处的断点
天气预报控制器被击中。
你可以通过更改Docker运行选项来使用主机上的特定端口docker-run: 调试任务(定义在.vscode/tasks.json文件)。例如,如果您想使用相同的端口(5000)来暴露该服务,docker-run: 调试任务定义将如下所示:
{
"type": "docker-run",
"label": "docker-run: debug",
"dependsOn": [
"docker-build: debug"
],
"dockerRun": {
"ports": [
{ "hostPort": 5000, "containerPort": 5000 }
]
},
"netCore": {
"appProject": "${workspaceFolder}/netcorerest.csproj",
"enableDebugging": true
}
下一步
你完成了!现在你的容器已经准备好了,你可能想: