云应用

使用 Docker 让传统 .NET 应用程序现代化_云应用_云计算_正航

时间:2017-05-05 14:00来源:互联网 作者:网络 点击:
我将先把整个应用措施原样移动到 Docker 中,而不执行任何代码变动,然后在轻型容器中运行网站和数据库。接下来,我将先容一种成果驱动型要领,用于扩展应用措施、晋升机能并为用

15 年来,Microsoft .NET Framework 一直都是乐成的应用措施平台,在旧版 Framework 和旧版 Windows Server 上运行的业务要害应用措施不行胜数。这些传统应用措施仍具有很大的业务代价,但其维护、进级、扩展和打点难度大概很大。

同样,没有任何来由能证明投资完全重写这些应用措施是公道的。借助在轻型容器中运行应用措施的平台 Docker 和 Windows Server 2016,可以或许赋予传统应用措施全新的生命,不只可以实现更多成果,还晋升了安详性和机能,更是朝着一连陈设这个偏向迈出了重要的一步,而无需建设耗时长且本钱高的从头生成项目。

在本文中,我将以毗连 SQL Server 数据库的整个 ASP.NET WebForms 应用措施为例,操作 Docker 平台让其现代化。我将先把整个应用措施原样移动到 Docker 中,而不执行任何代码变动,然后在轻型容器中运行网站和数据库。接下来,我将先容一种成果驱动型要领,用于扩展应用措施、晋升机能并为用户提供自助式阐明。借助 Docker 平台,你将相识如何迭代应用措施的新版本、安详快速地进级组件,以及如何向 Microsoft Azure 陈设完整的办理方案。

Docker 如安在 .NET 办理方案中大展拳脚

Docker 合用于处事器应用措施,包罗网站、API、动静传送办理方案以及在靠山运行的其他组件。不能在 Docker 中运行桌面应用措施,因为 Docker 平台和 Windows 主机之间没有 UI 集成。因此,无法在容器中运行 Windows 窗体或 Windows Presentation Foundation (WPF) 应用措施(尽量可以利用 Docker 打包和分发这些桌面应用措施),但 Windows Communication Foundation (WCF)、.NET 节制台应用措施和所有种类的 ASP.NET 应用措施都是符合之选。

若要打包应用措施以供在 Docker 中运行,需要编写小型剧本文件 Dockerfile,用于自动执行所有应用措施陈设步调。这凡是包罗 Windows PowerShell 设置呼吁,以及用于复制应用措施内容和配置所有依赖项的指令。也可以解压缩已压缩的存档或安装 MSI,但打包历程全都是自动执行的,因此不能运行利用 Windows UI 并需要用户输入的安装历程。

通过查察办理方案体系布局来确定哪些部门可以在 Docker 容器中运行时,请留意,不利用 Windows UI 即可举办安装和运行的任何组件都是符合之选。本文将重点放在 .NET Framework 应用措施上,但你可以在 Windows 容器中运行 Windows Server 上运行的任何应用措施,包罗 .NET Core、Java、Node.js 和 Go 应用措施。

将 .NET 应用措施迁移到容器中

如何迁移到 Docker 取决于应用措施的当前运行方法。假如是在 Hyper-V VM 中运行的完全设置应用措施,开放源代码 Image2Docker 东西可以从 VM 的磁盘自动生成 Dockerfile。假如有用于宣布 MSI 或 WebDeploy 包的生成历程,可以利用 Docker Hub 上的任一 Microsoft 根基映像编写你本身的 Dockerfile。

下面展示了完整的 Dockerfile,用于编写剧本将 ASP.NET WebForms 应用措施打包到 Docker 映像中:

FROM microsoft/aspnet:windowsservercore-10.0.14393.693SHELL ["powershell"]RUN Remove-Website -Name 'Default Web Site'; New-Item -Path 'C:web-app' -Type Directory; New-Website -Name 'web-app' -PhysicalPath 'C:web-app' -Port 80 -ForceEXPOSE 80RUN Set-ItemProperty -Path 'HKLM:SYSTEMCurrentControlSetServicesDnscacheParameters' -Name ServerPriorityTimeLimit -Value 0 -Type DWordCOPY ProductLaunch.Web /web-app

九行剧本我全都需要,其并不涉及应用措施变动。假设有一个 ASP.NET 2.0 应用措施,当前在 Windows Server 2003 上运行。利用上面的 Dockerfile,我可以在映像中生成此应用措施,该映像可当即将此应用措施进级到 Windows Server 2016 和 .NET Framework 4.5。我将逐个先容下面这些指令:

FROM microsoft/aspnet 指示 Docker 从哪个映像入手。在此示例中,从在 Windows Server Core 特定版本基本之上安装 IIS 和 ASP.NET 的 Microsoft 映像入手。

SHELL ["powershell"] 针对 Dockerfile 的剩余部门变为差异的 shell,以便我可以运行 PowerShell cmdlet。

RUN Remove-Website 利用 PowerShell 配置 IIS,同时删除默认网站并为应用措施新建一个位置已知的网站。

EXPOSE 80 显式公初步口 80,以答允网络流量在 Docker 容器默认被锁按时流入容器。

RUN Set-ItemProperty 禁用映像内的 Windows DNS 缓存,以便 Docker 可以或许响应所有 DNS 请求。

COPY ProductLaunch.Web 将主机上 ProductLaunch.Web 目次中已宣布的网站项目复制到映像中。

Dockerfile 雷同于 Web 应用措施的陈设指南,但它不是寄义恍惚的用户文档,而是寄义准确的可操纵剧本。为了生成打包的应用措施,我从包括 Dockerfile 和已宣布的网站的目次运行 Docker 生成呼吁:

docker build --tag sixeyed/msdn-web-app:v1 .


(责任编辑:正航)
免责声明:本网站部分文章和信息来源于国际互联网由程序自动整理,本网转载出于传递更多信息和学习之目的,并不意味着赞同其观点或证实其内容的真实性。 如转载稿涉及版权等问题,请立即联系管理员,我们会予以更改或删除相关文章,保证您的权利。