本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

【j2开奖】使用 Docker 让传统 .NET 应用程序现代化

时间:2017-05-05 16:33来源:118图库 作者:j2开奖直播 点击:
15 年来,Microsoft .NET Framework 一直都是成功的应用程序平台,在旧版 Framework 和旧版 Windows Server 上运行的业务关键应用程序不计其数。这些传统应用程序仍具有很大的业务价值,但其维

  15 年来,Microsoft .NET Framework 一直都是成功的应用程序平台,在旧版 Framework 和旧版 Windows Server 上运行的业务关键应用程序不计其数。这些传统应用程序仍具有很大的业务价值,但其维护、升级、扩展和管理难度可能很大。同样,没有任何理由能证明投资完全重写这些应用程序是合理的。借助在轻型容器中运行应用程序的平台 Docker 和 Windows Server 2016,能够赋予传统应用程序全新的生命,不仅可以实现更多功能,还提升了安全性和性能,更是朝着持续部署这个方向迈出了重要的一步,而无需创建耗时长且成本高的重新生成项目。

  在本文中,我将以连接 SQL Server 数据库的整个 ASP.NET WebForms 应用程序为例,利用 Docker 平台让其现代化。我将先把整个应用程序原样移动到 Docker 中,j2直播,而不执行任何代更改,然后在轻型容器中运行网站和数据库。接下来,我将介绍一种功能驱动型方法,用于扩展应用程序、提升性能并为用户提供自助式分析。借助 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 目录中已发布的网站项目复制到映像中。

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容