目录

背景

Docker包含什么?

我们为什么需要它?

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

什么是Dockerfile?

从Dockerfile生成Docker镜像

容纳现有的多层应用程序

Docker-Compose

安装Docker Compose Tool

确定yml文件的存储位置

将内容添加到yml文件

验证yml文件

几个有用的命令

关键要点

参考


  • 下载源代码 - 1.5 MB

背景

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

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

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

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

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

Docker包含什么?

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

我们为什么需要它?

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

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

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

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

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

Docker -version

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

什么是Dockerfile?

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

FROM microsoft/dotnet:2.1-aspnetcore-runtime-nanoserver-1803 AS base
WORKDIR /app
EXPOSE 80FROM 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 /appFROM build AS publish
RUN dotnet publish "ContainerBasedApp.csproj" -c Release -o /appFROM 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时,此工具会自动安装在Mac和Windows上。但对于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是运行应用程序的虚拟环境。

参考

  • https://docs.docker.com/engine/reference/commandline/docker/
  • https://docs.microsoft.com/en-us/virtualization/windowscontainers/about/
  • https://blog.netapp.com/blogs/containers-vs-vms/

使用Docker支持创建ASP.NET Core应用程序相关推荐

  1. 《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)

    创建ASP.NET Core Web应用程序 如果您使用的是VS2017请看 VS2017创建ASP.NET Core Web程序(三) 在这个视频中我们将讨论 可用的不同项目模板及其功能 预制的项目 ...

  2. VS2017创建ASP.NET Core Web程序

    创建ASP.NET Core Web应用程序 如果您使用的是VS2019 请看 VS2019创建ASP.NET Core Web程序 在这个视频中我们将讨论 可用的不同项目模板及其功能 预制的项目模板 ...

  3. 逐步创建ASP.NET Core 2.2应用程序

    目录 介绍 条件 机器配置 期望 好开始 创建一个新的ASP.NET Core 2.2应用程序 插入中间件和服务 创建模型和存储库类 添加控制器 添加视图 改进包括HTML标记 介绍布局模板 使用_V ...

  4. ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)

    上个月15日,上海MVP做了一次线下的技术分享活动,我分享的主题是<快速构建容器化的ASP.NET Core应用程序>,有关这次活动的简报,可以参考这里.另外,我的主题分享的PPT也可以点 ...

  5. ASP.NET Core应用程序的参数配置及使用

    应用程序的开发不仅仅是写代码这点事情.假设你正在开发一个能够支持多次部署的微服务,此时你就需要有一个合理的应用程序配置方案,以便在开发和生产环境中能够方便地选用不同的配置参数,并且能够在部署到容器服务 ...

  6. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第3天

    目录 主题 路线图 先决条件 Azure Active Directory和服务主体 创建一个Azure Active Directory和服务主体 将应用程序集成到角色 将Jenkins与Azure ...

  7. 运行Vue在ASP.NET Core应用程序并部署在IIS上

    前言 从.NET Core 1.0开始我们就将其应用到项目中,但是呢我对ASP.NET Core一些原理也还未开始研究,仅限于会用,不过园子中已有大量文章存在,借着有点空余时间,我们来讲讲如何利用AS ...

  8. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第4天

    目录 主题 路线图 Jenkins 先决条件 使用Jenkins Azure Pipeline在Azure上的ASP.NET Core应用程序的CI/CD 创建新的管道作业 添加参数 添加管道脚本 运 ...

  9. 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第2天

    目录 主题 路线图 先决条件 将ASP.NET Core应用发布到Azure应用服务 在Azure上配置Jenkins 在Azure上创建Jenkins服务器 解锁Jenkins 结论 主题 本系列文 ...

最新文章

  1. 【学神-RHEL7】1-4-1-Linux文件管理和恢复误删除的文件
  2. 【学习笔记】5、Python基础语法
  3. 如何做好iOS应用安全?这有一把行之有效的“三板斧”
  4. jquery如何实现ajax技术,使用JavaScript和jQuery简单实现Ajax技术(示例代码)
  5. Spring Boot入门(9)网页版计算器
  6. python 连续三个数满足条件_计算满足条件的连续值数(Pandas Dataframe)
  7. c语言合法常量e8,c语言合法常量定义
  8. linux 将当前时间往后调整2分钟_【转】修改LINUX时间
  9. 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)
  10. C++Builder 解决绘图闪动问题
  11. 班级信息管理c语言代码,C语言班级信息管理系统(有详细代码).doc
  12. Unity MVC实现背包系统(2)
  13. 风口的猪-中国牛市(动态规划)----百度2016研发工程师在线编程题
  14. Unity项目捏脸解决方案BlendShape
  15. [初学Python]利用某网站的功能写一个磁力链转种子工具
  16. 为什么远程计算机后会黑屏,电脑上钉钉怎么远程,为什么远程后黑屏?
  17. Stack overflow (CVF, IVF)
  18. 知道这六种拍摄技巧,让你玩转夕阳拍摄
  19. 有什么方法判断网站后台是用什么语言写的
  20. DeepSORT论文翻译(SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC)

热门文章

  1. 宁夏师范大学本科计算机理工,2019年宁夏师范学院区内二批普通本科理工类(录取905人,共16个专业)...
  2. erp框架 saas_传统ERP软件和SaaS管理软件的区别
  3. php用高德地图api坐标返回市_php百度坐标转高德坐标(示例代码)
  4. 怎样获取php页面get的值,PHP循环获取GET和POST值的代码
  5. 网页不够惊艳?优秀案例给你灵感
  6. 配色的协调性的重要性,你知道吗?
  7. 质量超高的UI素材站!推荐UI\UX设计师
  8. iframe带了token不显示_token是什么
  9. ad中电容用什么封装_【AD封装】VH3.96mm插件座子(带3D)
  10. echarts grid的样式位置_vue使用Echarts vue使用Echarts滚动条