ASP.NET 容器内的核心

在本指南中,你将学习如何:

  • 创建一个Dockerfile描述一个简单的.NET Core服务容器的文件。
  • 构建、运行并验证服务的功能。
  • 调试以容器形式运行的服务。

前提条件

创建一个 .NET Web API 项目

  1. 为项目创建一个文件夹。

  2. 在项目文件夹中打开开发者命令提示符,初始化项目:

    dotnet new webapi --no-https
    

向项目添加 Docker 文件

  1. 在VS Code中打开项目文件夹。

  2. 等 C# 扩展提示你添加构建和调试所需的资产,然后选择“是”。你也可以打开命令面板(⇧⌘P(Windows,Linux Ctrl+Shift+P),使用.NET:生成资产用于构建和调试命令。

  3. 打开命令面板(⇧⌘P(Windows,Linux Ctrl+Shift+P),使用容器:将Docker 文件添加到工作区......命令:

    将 Dockerfile 添加到 .NET 项目中

  4. 当提示使用应用平台时,使用.NET:ASP.NET Core

  5. 当被提示选择作系统时,选择WindowsLinux

    Windows只适用于你的Docker安装配置为使用Windows容器。

  6. 系统会问你是否想添加 Docker Compose 文件。本教程中我们不会使用 Docker Compose,所以“是”和“否”回答都可以。

  7. 将应用端点的端口改为5000.

  8. Dockerfile以及.dockerignore文件会被添加到工作区。

    该扩展还将创建一组用于构建和运行容器的 VS Code 任务(包括调试和发布配置,共四个任务),以及用于在调试模式下启动容器的调试配置

构建应用程序

  1. 打开终端提示符(⌃'(Windows,Linux Ctrl+')。

  2. 子嗣Dotnet 构建命令来构建应用程序:

    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 文件。扩展功能提供补足和上下文帮助。要查看这些功能,请按照以下步骤为你的服务镜像添加环境变量:

  1. 打开Dockerfile档案。

  2. 用途环境环境向服务容器镜像添加环境变量的指令。该指令应放在基地舞台Dockerfile(文件中的第一阶段)。设置ASPNETCORE_URLS变量为http://*:5000:

    向 Docker 镜像添加环境变量

    注意容器工具扩展中列出了所有可用的 Dockerfile 指令并描述语法。

    Container Tools 扩展使用基地舞台Dockerfile为你的服务创建容器镜像的调试版本。放ASPNETCORE_URLS环境变量定义基地该变量可在容器镜像的调试版本和发布版本中使用。

  3. 拯救Dockerfile档案。

构建图像

  1. 打开命令面板(⇧⌘P(Windows,Linux Ctrl+Shift+P),并发布容器镜像:构建镜像......命令。

  2. 打开容器浏览器,确认新图片在图片树中可见:

    验证 Docker 镜像的存在

测试服务容器

  1. 右键点击前一步构建的图片,选择“运行”或“交互运行”。容器应该已经启动,你应该能在容器资源管理器的“容器”视图中看到它:

    运行服务容器

  2. 打开网页浏览器,导航到 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 运行命令(请查看终端窗口中的命令输出)。你也可以通过在容器资源管理器中右键点击容器并选择检查来确认容器使用的主机端口。这会打开一个详细描述容器的 JSON 文档。搜索PortBindings元素,例如:

    "PortBindings": {
      "5000/tcp": [
        {
          "HostIp": "",
          "HostPort": "5000"
        }
      ]
    },
    
  3. 测试完成后,在容器资源管理器中右键点击容器,选择停止

容器中的调试

当应用中添加 Docker 文件时,容器工具扩展还添加了 VS Code 调试器配置,用于在容器内运行服务时调试服务。扩展会自动检测服务使用的协议和端口,并指向浏览器访问该服务,但我们需要告诉它应该使用哪个 URL 路径。

  1. 在代码开头设置一个断点Get()方法控制器/WeatherForecastController.cs档案。

  2. 开门.vscode/launch.json归档与查找容器:.NET Core 发布调试配置。

  3. 添加dockerServerReadyAction容器:.NET Core 发布配置:

    "dockerServerReadyAction": {
        "uriFormat": "%s://localhost:%s/WeatherForecast"
    }
    
  4. 确保配置为激活状态:

    Selected Docker 调试配置

  5. 开始调试(F5)。

    • 服务容器的调试版本会被构建并启动。
    • 浏览器打开请求新的天气预报。
    • 断点天气预报控制员被击中了。

你可以通过更改 Docker 运行选项来使用主机上的特定端口docker-run: debug任务(定义于.vscode/tasks.json文件)。例如,如果你想使用相同的端口(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
    }

下一步

你完了!现在你的容器已经准备好了,你可能想: