使用Docker支持创建ASP.NET Core应用程序

目录

背景

Docker包含什么?

我们为什么需要它?

使用Docker支持创建ASP.NET核心应用程序

什么是Dockerfile?

从Dockerfile生成Docker镜像

容纳现有的多层应用程序

Docker-Compose

安装Docker Compose Tool

确定yml文件的存储位置

将内容添加到yml文件

验证yml文件

几个有用的命令

关键要点

参考


背景

这个热门词'Docker'什么?让我们理解这一点。

 

在图像中,我们可以看到鲸鱼携带着这么多盒子并且非常开心。这些盒子称为容器,包含运行我们软件所需的一切,而Docker是提供这种容器化的平台。从技术角度来说,容器只不过是虚拟机镜像。

 

上图描绘了传统虚拟机镜像与容器相比的外观。两张图片都与基础设施(可以视为服务器)具有相同的基础,操作系统位于其上。在第一张图片中,Hypervisor是一个虚拟框,可以是HypervisorVMWare等,并且可以容纳所有客户操作系统。此外,这些客户机操作系统包含源代码和二进制文件以及应用程序。然而,在第二张图片(容器环境)中,Docker引擎没有任何客户操作系统。那么,操作系统在哪里?

别担心。它就在那里。Docker引擎本身包含一个小型操作系统,它将所有内容都保存为容器。这意味着这个小内核由位于其上的每个应用程序/二进制文件共享。

从本质上讲,我们可以说Docker可以作为VM的轻量级替代品,因为它不需要Hypervisor

Docker包含什么?

Docker包含用于运行软件的操作系统,源代码,环境变量(如果有)和从属组件。因此,如果有人想要运行您的软件,他们可以简单地拿起容器并开始使用,而无需花费精力来设置机器以使其工作。

我们为什么需要它?

很多时候,你一定听过开发人员的说法——它在我的机器上工作正常,但我不知道你的机器上缺少什么,或者说为什么同一个软件在你的机器上没有工作?这种讨论通常会在测试阶段出现,而且就我个人的经验而言,有时需要花费数小时来确定那些小错失的依赖性。在这里,Docker来救援。由于它是容器化,每个依赖项都以容器的形式打包,可用于LinuxWindows。因此,使用该软件的每个人都将拥有相同的环境。基本上,docker的概念完全消除了不匹配环境的问题。这不是很棒吗?

使用Docker支持创建ASP.NET核心应用程序

打开Visual Studio,转到New Project并选择ASP.NET Core Web Application,如下所示:

 

单击确定,您将看到以下屏幕,您必须选中启用Docker支持(需要Docker for Windows操作系统作为Windows复选框。

 

还有一个名为'Requires Docker for Windows'的超链接,可用于安装Windowsdocker。如果您在开始此练习之前没有安装docker,现在可以通过单击此超链接来完成。您还可以通过在Windows PowerShell上键入以下命令来验证docker安装:

 

Docker -version

创建应用程序后,您将看到一个名为Dockerfile的文件被添加到应用程序中。此时,如果需要,您可以更改应用程序的视图。

什么是Dockerfile

在导航到解决方案资源管理器时,您将看到Dockerfile的内容类似于以下内容:

FROM microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1803 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk-nanoserver-1803 AS build
WORKDIR /src
COPY ["ContainerBasedApp/ContainerBasedApp.csproj", "ContainerBasedApp/"]
RUN dotnet restore "ContainerBasedApp/ContainerBasedApp.csproj"
COPY . .
WORKDIR "/src/ContainerBasedApp"
RUN dotnet build "ContainerBasedApp.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "ContainerBasedApp.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ContainerBasedApp.dll"]

Dockerfile是一个包含一些命令的文本文件。这些命令用于创建docker镜像。让我们简要介绍一下这些命令:

  • FROM——这将为以下说明设置基本镜像,我们的基本镜像是dotnet:2.1-aspnetcore
  • WORKDIR——这将设置用于存储输出的工作目录,这些输出是使用给定命令生成的
  • EXPOSE——这通知docker该容器侦听给定端口
  • COPY——这会将文件/文件夹从源路径复制到目标路径
  • RUN——对给定镜像执行给定命令
  • ENTRYPOINT——这将容器设置为可执行文件

有关Dockerfile的更多信息,请访问此处

Dockerfile生成Docker镜像

Dockerfile用于创建docker镜像,因为此文件包含构建镜像所需的所有必要信息。Build是用于从docker文件创建镜像的命令。现在可以使用Visual Studio UI或使用CLI来生成镜像。我们来看看Visual Studio路径。

右键单击该项目,然后单击Publish...

 

接下来是创建容器注册表,它将部署和存储docker镜像,在这里,我们将选择Docker Hub,如下所示:

 

单击创建配置文件按钮后,将出现以下对话框,您需要在其中提供连接到Docker Hub凭据。

 

如果一切都正确完成,将出现以下屏幕:

 

现在单击发布按钮。它将启动Docker可执行文件并执行用Dockerfile编写的每一行。

成功发布后,您将在输出窗口中收到消息Successfully tagged containerbasedapplatest。但同样也可以在docker网站上验证,如下所示:

 

它也可以通过命令提示符验证:

 

现在是时候运行应用程序并验证我们是否可以查看我们的网页。为此,只需从Visual Studio运行应用程序,您就可以看到您的视图。以下是我从示例应用程序中看到的内容:

 

在这里,您可以看到您的应用程序在docker中运行。

容纳现有的多层应用程序

根据应用程序结构,无论是单个独立应用程序,还是具有多个服务,都可以引入容器化。根据应用程序,有时单个容器就足够了,有时每个服务或组件需要一个容器。要在现有应用程序中启用docker部署,请转到解决方案资源管理器,右键单击项目,选择Add,然后选择Docker Support,如下所示:

 

执行上述操作将添加Docker所需的文件。现在让我们了解一下docker-compose

Docker-Compose

Dockeposer-com是一个定义和运行多容器应用程序的工具。关于这个工具最好的部分是它使用与Docker相同的命令,这意味着我们不需要记住任何特殊命令才能使用这个工具。有各种方法可以使用这个工具但是作为本文的一部分,我会采取yml文件路由。以下是创建yml文件的步骤:

安装Docker Compose Tool

安装Docker时,此工具会自动安装在MacWindows上。但对于Linux,必须明确安装,这可以使用此处提到的命令完成。安装工具后,可以使用以下命令进行验证:

 

确定yml文件的存储位置

我们可以将yml文件存储在磁盘上的任何位置。所以,让我们在你的机器上创建一个文件夹,并在其中创建一个空的yml文件。

将内容添加到yml文件

现在,在将内容添加到此文件之前,我们必须确定我们的主要组件或说部分应用程序。例如,假设我们需要创建一个Web应用程序。因此,最低要求是Web服务器和数据库服务器。在浏览此链接时,可以选择Web服务器和数据库服务器镜像。在这里,我选择Windows IIS作为Web服务器,选择MYSQL作为我的数据库。下面是使用此处提到的命令拉取IIS镜像的屏幕截图:

 

同样,您可以拉取数据库服务器的镜像(如果您的计算机上尚不可用)。因此,我已经更新了我的yml文件,如下所示:

 

验证yml文件

创建文件后,接下来将验证我们的yml文件。转到保存yml文件的目录,并使用CLI运行以下命令:

 

如果你能看到文件的内容,就意味着一切都很好。

几个有用的命令

用于运行yml文件并在应用程序中创建容器的命令:

docker-compose up

用于停止所有正在运行的容器的命令

docker-compose down

请注意,本文中创建的yml文件包含最少的信息,不足以用于实际的生产项目。在实时项目中,我们可能需要提供更多信息,如端口,数量等。完整的信息可以在这里找到。

关键要点

容器提供了打包和完成具有所有必需依赖关系的应用程序的能力,这意味着无论任何设置,应用程序都可以在任何其他计算机上运行。在一个声明中,我们可以总结一切——Dockerfile是一个部署脚本,Image是打包的应用程序,Registry是镜像存储,Container是运行应用程序的虚拟环境。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值