65.9K
CodeProject 正在变化。 阅读更多。
Home

在 VS 17 中同时调试在不同 Docker 容器上运行的多个 .NET Core 项目

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.14/5 (5投票s)

2017 年 6 月 12 日

CPOL

4分钟阅读

viewsIcon

15997

downloadIcon

169

调试在 Docker 容器上运行的多个 .NET Core 项目。

引言

在基于微服务的应用程序世界中,我们经常需要同时调试多个项目。在 Docker 发布之后,基于微服务的应用程序的开发发生了很大变化。在 Visual Studio 17 中,我们可以轻松地为我们的应用程序添加 Docker 支持。在本文中,我们将看到如何在不同的 Docker 容器上运行的两个 .NET Core 项目进行调试。

为什么需要同时调试

假设我们有一个由微服务构成的应用程序,它有两个项目,一个是 ASP.NET MVC 项目,另一个是 Web API 项目。我们的 MVC 项目从我们的 API 项目获取数据,并且 API 项目在需要时提供数据。在我们的应用程序的开发阶段,我们经常需要同时调试这两个项目,以观察我们的应用程序的行为。

为什么使用 Docker

Docker 是一个轻量级、开放和安全的开发人员平台。它是一个容器化工具,通常与虚拟机进行比较,而虚拟机消耗大量资源。但 Docker 为开发人员提供了什么好处呢?下面这一行描述了使用 Docker 的主要好处:

Docker 提供了一种一致的方式,可以在不同的环境中使用我们的代码。

因此,使用 Docker,我们可以通过使用最少的计算资源来开发和运行我们的软件。 Docker 可以消除应用程序冲突,更快地交付软件,确保更好地利用我们的资源等等。

什么是 Docker 容器

Docker 自首次亮相以来一直在改变世界,而 Docker 容器在此任务中扮演着非常重要的角色。 Docker 容器基本上是 Docker 镜像的实例,我们可以简单地理解为 - Docker 容器就是运行软件!我们可以为任何特定的镜像创建尽可能多的 Docker 容器。

使用代码

在使用代码之前,我们需要确保一些事情,首先要检查您是否已安装 Docker 并完美运行以及任何版本的 VS 17 和 .NET core 组件。

创建解决方案作为步骤 1

在本文中,我们将创建一个名为 Employee attendance 的测试应用程序,该应用程序将显示公司员工的每日出勤数据。为此,首先我们将创建一个 Visual Studio 解决方案,其中包含两个 .NET core 项目,一个 ASP.NET MVC 和另一个 ASP.NET Web API,如下所示:

更改 API 控制器作为步骤 2

Visual Studio 非常棒!它已经在 MVC 项目中为我们创建了一个控制器和一些视图,还在 API 项目中创建了一个控制器。让我们对我们的 API 控制器进行一些更改以获取员工出勤数据,

        public IEnumerable<EmployeeAttendanceData> Get()
        {
            List<EmployeeAttendanceData> attendances = new List<EmployeeAttendanceData>
            {
                new EmployeeAttendanceData{ Name="Romel", LogInTime = new DateTime(2017, 6, 1, 12, 20, 0), Status="Late" },
                new EmployeeAttendanceData{ Name="Ashek", LogInTime = new DateTime(2017, 6, 2, 8, 20, 0), Status="In time" },
                new EmployeeAttendanceData{ Name="Hassan", LogInTime = new DateTime(2017, 6, 3, 9, 20, 0), Status="In time" },
                new EmployeeAttendanceData{ Name="Chapal", LogInTime = new DateTime(2017, 6, 4, 9, 15, 0), Status="In time" },
                new EmployeeAttendanceData{ Name="Maruf", LogInTime = new DateTime(2017, 6, 5, 11, 20, 0), Status="Late" }
            };

            return attendances;
        }

我们在 API 控制器中创建了一个 GET 方法来提供出勤数据。请注意,我们还创建了一个名为 EmployeeAttendanceData 的模型类。

获取出勤数据作为步骤 3

从我们的 MVC 控制器,我们将调用 API 控制器的方法来获取出勤数据。所以让我们编写代码-

        public IActionResult Index()
        {
            ValuesController apiController = new ValuesController();
            IEnumerable<EmployeeAttendanceData> attendances = apiController.Get();
            ViewBag.attendances = attendances;
            return View();
        } 

在上面的 action 方法中,我们调用 API 控制器的 Get 方法并将出勤数据存储在 ViewBag 中,之后我们将在我们的视图中枚举这个集合。

添加 Docker 支持作为步骤 4

我们可以在我们的项目中添加单独的 Docker 支持,也可以在我们的解决方案文件中添加 Docker 支持。要添加项目级别的 Docker 支持,请右键单击该项目,然后在 Add 菜单下,您将看到添加 Docker 支持的选项-
 
dockerSupport
我们必须为我们的每个项目添加 Docker 支持。添加 Docker 支持后,我们将看到一个 Dockerfile 已被添加到我们的项目中,此文件包含容器的入口点、工作目录和其他一些信息。还要注意,一个新的 docker-compose 项目已添加到我们的解决方案中,在 docker-compose 下有一个 docker-compose.yml 文件来实例化我们项目的 Docker 容器。
 

在容器上运行项目作为步骤 5

现在我们已经为我们的项目提供了 Docker 支持,所以是时候创建我们项目的 Docker 镜像并在容器上运行它们了。使用 Docker 运行应用程序以创建项目的镜像并在容器上运行它们。成功创建镜像和容器后,打开 Windows PowerShell 并运行此命令-

docker ps

您将看到当前正在运行的 Docker 容器,如下所示-

RunningContainers现在如果我们打开我们的浏览器并在地址栏中键入此 URL- https://:32769/ 我们将看到我们的应用程序正在 Docker Linux 容器上运行。

同时调试作为步骤 6

现在我们将设置两个断点 - 一个在我们的 MVC 控制器的 action 方法中,另一个在我们的 API 控制器的 GET 方法中。现在,如果我们从浏览器窗口刷新我们的应用程序,我们将看到我们的应用程序同时在两个断点处中断。如果我们进入我们解决方案的属性窗口,我们会发现我们将单个项目作为启动项目-

solutionPropertyWindow

 因此,我们可以在 Visual Studio 17 中同时调试在 Docker 容器上运行的多个项目。

© . All rights reserved.