使用 Docker 容器化您的 .NET Core 应用程序

作者 : 慕源网 本文共2963个字,预计阅读时间需要8分钟 发布时间: 2021-11-3 共184人阅读

介绍

您现在可能听到的一个流行词是容器,以及它们与我们过去看到的传统虚拟机概念相比具有哪些优势。毫无疑问,容器是创建微服务并使它们存在于自己的空间中的好方法,这使它们易于移动和升级。此外,由于像 Microsoft Azure 这样的云提供商提供用于存储和托管容器的开箱即用解决方案,因此使用容器部署到云变得更加高效。在本文中,我们将着眼于将 .NET  Core Web API 应用程序放置在容器中,将容器托管在协调器中,使容器可供使用,并最终运行和使用此容器化应用程序。

我们将使用的工具

我们将使用的容器技术是 Docker。这已经在 Visual Studio 2019 中集成了支持,因此,在创建应用程序时甚至在创建应用程序之后,都可以非常轻松地将 Docker 支持添加到我们的应用程序中。我们将使用的容器编排器是 Docker Desktop。这是开发和测试的理想选择。

但是,对于企业解决方案托管,使用更高级的选项,如 Kubernetes。但是,一旦您了解了如何使用编排器,这些知识就可以应用于所有类型。

下载并安装 Docker Desktop

第一步是下载最新的Docker Desktop版本并安装。由于我将使用 Windows 10,因此我已经下载了适用于 Windows 的版本并进行了安装。

您可以使用以下命令验证版本:

使用 Docker 容器化您的 .NET Core 应用程序

创建 Web API 应用程序并将其容器化

我们现在继续在 Visual Studio 2019 中创建我们的 ASP.NET Core Web API 应用程序。我使用的是社区版。我们将此应用程序命名为“WebAppDocker”。
我们不会在创建时选择 Docker 支持,稍后添加。创建应用程序后,我们将选择以下选项:

使用 Docker 容器化您的 .NET Core 应用程序

然后选择 Windows 操作系统选项:

使用 Docker 容器化您的 .NET Core 应用程序

该过程完成后,将向项目添加一个 docker 文件。该应用程序现在使用 docker 进行容器化。确保这看起来像下面的例子:
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.  
 
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.  
#For more information, please see https://aka.ms/containercompat  
  
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-nanoserver-1903 AS base  
WORKDIR /app  
EXPOSE 80  
  
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1903 AS build  
WORKDIR /src  
COPY ["WebAppDocker/WebAppDocker.csproj", "WebAppDocker/"]  
RUN dotnet restore "WebAppDocker/WebAppDocker.csproj"  
COPY . .  
WORKDIR "/src/WebAppDocker"  
RUN dotnet build "WebAppDocker.csproj" -c Release -o /app/build  
  
FROM build AS publish  
RUN dotnet publish "WebAppDocker.csproj" -c Release -o /app/publish  
  
FROM base AS final  
WORKDIR /app  
COPY --from=publish /app/publish .  
ENTRYPOINT ["dotnet", "WebAppDocker.dll"]  

下一步是添加容器编排器支持。这将创建一个名为“docker-compose”的新项目。该项目将有一个名为“docker-compose.yml”的文件。

该文件必须如下所示:

version: '3.4'  
  
services:  
  webappdocker:  
    image: webappdocker  
    build:  
      context: .  
      dockerfile: WebAppDocker\Dockerfile  
    ports:  
       - "8080:80"

此文件将用于在 Docker 桌面编排器中启动容器化应用程序。在这个文件中,我们看到容器的名称是“webappdocker”。它使用了在上一步中创建的 docker 文件。这里最后要注意的是,我们将从主机上的 8080 端口路由到容器上的 80 端口。如果我们查看应用程序的 docker 文件,我们会看到我们在容器的端口 80 上公开了 Web API。

我们现在运行 docker-compose 项目,我们将看到容器现在正在 Docker Desktop 中运行。要验证从系统托盘打开“Docker Desktop”仪表板,您将看到以下屏幕截图:

使用 Docker 容器化您的 .NET Core 应用程序

使用 Docker 容器化您的 .NET Core 应用程序

现在要测试在容器内运行的这个 Web API,让我们创建另一个名为“DockerClientApp”的 .NET Core 控制台应用程序。此应用程序的代码如下所示:

using System;  
using System.Net.Http;  
using System.Threading.Tasks;  
  
namespace DockerClientApp  
{  
    public class Program  
    {  
        public static async Task Main(string[] args)  
        {  
            using (var client = new HttpClient())  
            {  
                var portno = "8080";  
                client.BaseAddress = new Uri("http://localhost:" + portno + "/");  
                var result = await client.GetAsync("weatherforecast");  
                var response = await result.Content.ReadAsStringAsync();  
  
                Console.WriteLine(response);  
  
            }  
              
        }  
    }  
}  

当我们运行应用程序时,我们可以看到以下输出:

使用 Docker 容器化您的 .NET Core 应用程序

在这里,您看到我们使用端口 8080 来调用容器化的 Web API 应用程序,然后将其重定向到容器内部的端口 80。

意外错误

当我尝试添加 Docker 支持时,我在 Visual Studio 2019 中遇到了一些奇怪的错误。经过一些研究,我能够解决这个问题并添加 Docker 支持。解决方法如下:

在文件夹中,

C:\Windows\System32\drivers

将 cbfs6.sys 重命名为 cbfs6-temp.sys

然后,重新启动 Windows。这应该可以解决问题,然后您将能够添加 docker 支持。

总结

在本文中,我们研究了如何创建容器化的 ASP.NET Core Web API 应用程序以及如何在 Orchestrator Docker Desktop 中托管它。然后我们研究了如何从运行在主机上的另一个应用程序访问在容器中运行的这个应用程序。由于这是一项相对较新的技术,您可能会遇到许多问题,尤其是在部署和托管方面。但是,一旦设置完成,一切都会很好。


慕源网 » 使用 Docker 容器化您的 .NET Core 应用程序

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录