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

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

时间:2017-05-05 16:33来源:118图库 作者:j2开奖直播 点击:
Dockerfile 类似于 Web 应用程序的部署指南,但它不是含义模糊的用户文档,而是含义精确的可操作脚本。为了生成打包的应用程序,我从包含 Dockerfile 和已

  Dockerfile 类似于 Web 应用程序的部署指南,但它不是含义模糊的用户文档,而是含义精确的可操作脚本。为了生成打包的应用程序,我从包含 Dockerfile 和已发布的网站的目录运行 Docker 生成命令:

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

  此命令生成名为 sixeyed/msdn-web-app 且标记为 v1 的 Docker 映像。此名称包含我的 Hub 用户帐户名称 (sixeyed),因此我可以使用自己的凭据登录,并将这个映像发布到 Hub,从而共享它。标记可用于对映像进行版本控制,因此在打包应用程序的新版本时,映像名称将保持不变,但标记会变成 v2。

  我现在可以通过映像运行容器,这将会启动应用程序,但示例应用程序依赖 SQL Server,因此我必须先运行 SQL Server,然后才能启动网站。

从 Docker Hub 拉取依赖项

  Docker 包含网络堆栈。这样一来,容器既可以通过虚拟网络相互访问,也可以访问在物理网络上运行的外部主机。如果 SQL Server 实例是在网络中的一台计算机上运行,那么容器中的 ASP.NET 应用程序可以使用它,我只需在连接字符串中指定服务器名称即可。我也可以在容器中运行 SQL Server,Web 应用程序将能够在连接字符串中指定容器名称,从而访问它。

  SQL Server Express 位于 Docker Hub 上 Microsoft 维护的映像中。为了通过此映像启动数据库容器,我将运行以下代码:

  docker run --detach ` --publish 1433:1433 ` --env sa_password=MSDNm4g4z!n3 ` --env ACCEPT_EULA=Y ` --name sql-server ` microsoft/mssql-server-windows-express

  这会在后台启动具有拆离标记的容器,并发布端口 1433,以便我可以从外部连接容器中的 SQL 实例(可能在主机上使用 SQL Server Management Studio)。env 选项是键值对,Docker 在容器内将其公开为系统环境变量。SQL Server 映像使用这些值来确认许可协议是否已被接受,并为 sa 用户设置密码。

  Docker 必须先在本地复制映像,然后才能运行容器。分发内容会在 Docker 平台中生成。因此,如果在运行此命令时没有本地 SQL Server Express 映像,Docker 将会从 Hub 下载。Docker Hub 上有超过 50 万个映像,这些映像已被下载超过 90 亿次。Docker 始于 Linux,其中大部分映像是 Linux 应用程序,但优质的 Windows 应用程序也越来越多,可供你下载并直接应用到解决方案中。

  现在,SQL Server 在 Docker 容器中运行,我的 Web 应用程序在连接字符串中将 sql-server 指定为主机名,以便连接在 Docker 中运行的数据库。我可以在后台启动 WebForms 应用程序,并发布端口 80,让网站可供访问:

  docker run --detach ` --publish 80:80 ` sixeyed/msdn-web-app:v1

  如果外部计算机在端口 80 上向我的主机发送请求,Docker 会接收请求,并透明地将请求转发给容器中运行的 ASP.NET 应用程序。如果我使用的是主机,则需要运行“docker inspect”获取容器的 IP 地址,然后转到容器即可显示网站(这是一个简单的产品发布微站)。图 1展示了在 Docker 中运行的网站的数据捕获页面。

  

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

  图 1:在 Docker 中运行的网站的注册页

  运行“docker ps”将列出所有正在运行的容器。一个是数据库,另一个是 Web 应用程序,但可以相同方式对两者进行管理:运行“docker top”可以查看在容器中运行的进程;运行“docker logs”可以查看应用程序的日志输出;运行“docker inspect”可以查看公开的端口以及有关容器的其他许多信息。一致性是 Docker 平台的主要优势。可以相同方式打包、分发和管理应用程序,无论其使用什么技术。

拆分整个应用程序的功能

  至此,应用程序已在新式平台上运行,我可以开始让应用程序本身现代化了。虽然将整个应用程序细分成较小服务的工作量非常浩大,但可以采取更有针对性的方法,将重点放在关键功能(如定期变化的功能)上,这样就可以部署有变化的功能的更新,而无需对整个应用程序执行回归测试。具有非功能性要求的功能可以受益于另一种设计(即无需对应用程序进行完全的体系结构重建),也是合适之选。

  我将从修复性能问题入手。在现有代码中,应用程序同步连接数据库来保存用户数据。这种方法的扩展性不佳。也就是说,如果有许多并发用户,就会造成 SQL Server 瓶颈。与消息队列进行异步通信是更具扩展性的设计。对于此功能,我可以将 Web 应用程序中的事件发布到消息队列,然后将数据暂留代码移到用于处理此事件消息的新组件中。

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