使用Docker支持创建ASP.NET Core应用程序
目录
背景
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 containerbasedapp:latest”。但同样也可以在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应用程序相关推荐
- 《从零开始学ASP.NET CORE MVC》:VS2019创建ASP.NET Core Web程序(三)
创建ASP.NET Core Web应用程序 如果您使用的是VS2017请看 VS2017创建ASP.NET Core Web程序(三) 在这个视频中我们将讨论 可用的不同项目模板及其功能 预制的项目 ...
- VS2017创建ASP.NET Core Web程序
创建ASP.NET Core Web应用程序 如果您使用的是VS2019 请看 VS2019创建ASP.NET Core Web程序 在这个视频中我们将讨论 可用的不同项目模板及其功能 预制的项目模板 ...
- 逐步创建ASP.NET Core 2.2应用程序
目录 介绍 条件 机器配置 期望 好开始 创建一个新的ASP.NET Core 2.2应用程序 插入中间件和服务 创建模型和存储库类 添加控制器 添加视图 改进包括HTML标记 介绍布局模板 使用_V ...
- ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)
上个月15日,上海MVP做了一次线下的技术分享活动,我分享的主题是<快速构建容器化的ASP.NET Core应用程序>,有关这次活动的简报,可以参考这里.另外,我的主题分享的PPT也可以点 ...
- ASP.NET Core应用程序的参数配置及使用
应用程序的开发不仅仅是写代码这点事情.假设你正在开发一个能够支持多次部署的微服务,此时你就需要有一个合理的应用程序配置方案,以便在开发和生产环境中能够方便地选用不同的配置参数,并且能够在部署到容器服务 ...
- 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第3天
目录 主题 路线图 先决条件 Azure Active Directory和服务主体 创建一个Azure Active Directory和服务主体 将应用程序集成到角色 将Jenkins与Azure ...
- 运行Vue在ASP.NET Core应用程序并部署在IIS上
前言 从.NET Core 1.0开始我们就将其应用到项目中,但是呢我对ASP.NET Core一些原理也还未开始研究,仅限于会用,不过园子中已有大量文章存在,借着有点空余时间,我们来讲讲如何利用AS ...
- 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第4天
目录 主题 路线图 Jenkins 先决条件 使用Jenkins Azure Pipeline在Azure上的ASP.NET Core应用程序的CI/CD 创建新的管道作业 添加参数 添加管道脚本 运 ...
- 使用Jenkins在Azure Web App上进行ASP.NET Core应用程序的持续集成和部署(CI/CD)–第2天
目录 主题 路线图 先决条件 将ASP.NET Core应用发布到Azure应用服务 在Azure上配置Jenkins 在Azure上创建Jenkins服务器 解锁Jenkins 结论 主题 本系列文 ...
最新文章
- 【学神-RHEL7】1-4-1-Linux文件管理和恢复误删除的文件
- 【学习笔记】5、Python基础语法
- 如何做好iOS应用安全?这有一把行之有效的“三板斧”
- jquery如何实现ajax技术,使用JavaScript和jQuery简单实现Ajax技术(示例代码)
- Spring Boot入门(9)网页版计算器
- python 连续三个数满足条件_计算满足条件的连续值数(Pandas Dataframe)
- c语言合法常量e8,c语言合法常量定义
- linux 将当前时间往后调整2分钟_【转】修改LINUX时间
- 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)
- C++Builder 解决绘图闪动问题
- 班级信息管理c语言代码,C语言班级信息管理系统(有详细代码).doc
- Unity MVC实现背包系统(2)
- 风口的猪-中国牛市(动态规划)----百度2016研发工程师在线编程题
- Unity项目捏脸解决方案BlendShape
- [初学Python]利用某网站的功能写一个磁力链转种子工具
- 为什么远程计算机后会黑屏,电脑上钉钉怎么远程,为什么远程后黑屏?
- Stack overflow (CVF, IVF)
- 知道这六种拍摄技巧,让你玩转夕阳拍摄
- 有什么方法判断网站后台是用什么语言写的
- DeepSORT论文翻译(SIMPLE ONLINE AND REALTIME TRACKING WITH A DEEP ASSOCIATION METRIC)
热门文章
- 宁夏师范大学本科计算机理工,2019年宁夏师范学院区内二批普通本科理工类(录取905人,共16个专业)...
- erp框架 saas_传统ERP软件和SaaS管理软件的区别
- php用高德地图api坐标返回市_php百度坐标转高德坐标(示例代码)
- 怎样获取php页面get的值,PHP循环获取GET和POST值的代码
- 网页不够惊艳?优秀案例给你灵感
- 配色的协调性的重要性,你知道吗?
- 质量超高的UI素材站!推荐UI\UX设计师
- iframe带了token不显示_token是什么
- ad中电容用什么封装_【AD封装】VH3.96mm插件座子(带3D)
- echarts grid的样式位置_vue使用Echarts vue使用Echarts滚动条