博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker4Dev #7 新瓶装老酒 – 使用 Windows Container运行ASP.NET MVC 2 + SQLExpress 应用
阅读量:5757 次
发布时间:2019-06-18

本文共 2129 字,大约阅读时间需要 7 分钟。

上一篇Windows Container文章中给大家介绍了如何使用Windows Container运行一个传统的.net 4.5 web应用程序,当时我们使用了默认的Visual Studio模版创建了一个简单的项目,而且没有链接数据库。我相信使用.net进行应用开发的程序员们一定在想,如果我有一个很老的项目,比如使用的是asp.net mvc 3和sql server,那是否可以使用Windows Container进行部署呢?所以这次我找来了一个2010年的老项目,使用的是 asp.net mvc 2和sql server运行,这个项目已经有7年之老,应该比较有代表性了。

\\

首先我将这个项目导入到 Visual Studio 2017 中,并顺利完成了解决方案的升级,中间没有报任何的错误,现在,我需要启动一个 SQL Server 的容器来导入这个项目所使用的数据库,运行一下命令启动 Sql Express 容器。

\\
\docker run -d -p 1433:1433 -e sa_password=P2ssw0rd -e ACCEPT_EULA=Y -v c:\\temp:c:\\temp --name sql harbor-bj.devopshub.cn/microsoft/mssql-server-windows-express
\\

注意这里我使用了vol映射将本机的 c:\\temp目录映射到容器内的c:\\temp目录,这样我就可以将数据库文件放入这个目录,并在容器内挂接到sql server上面。

\\

同样,我们使用 docker inspect 命令获取这个容器的ip地址:

\\
\docker inspect -f \"{
{ .NetworkSettings.Networks.nat.IPAddress }}\" sql
\\

首先我们打开 SQL Server Management Studio,链接到这个容器上,这里输入以上命令获取的ip地址和在 docker run命令中所指定的sa密码:

\\

08ca8987fad3b3a90bb924d8db6b8eee.png

\\

将数据库mdf文件复制到本地的 c:\\temp目录中,然后进行数据库挂接,注意下图中 SQL Management Studio 所访问的是容器内的目录,因为做了vol映射,我们可以访问在本机的 c:\\temp 目录中的mdf文件。

\\

c6906298c47c0fe563652299f71ac25c.png

\\

现在对我们的 asp.net mvc 2项目中的web.config文件进行修改,将 ConnectionString 指向运行在容器中的SQL Server上面。

\\

6a69dc98a3049375755e5e743ad99be2.png

\\

然后在项目中添加 Dockerfile.windows 文件:

\\
\FROM harbor-bj.devopshub.cn/microsoft/iis\SHELL [\"powershell\"]\\RUN Install-WindowsFeature Net-Framework-45-ASPNET ; \\\ Install-WindowsFeature Web-Asp-Net45\\ARG source=.\WORKDIR 'c:\\app'\\RUN Remove-Website -Name 'Default Web Site'\RUN New-Website -Name 'aspnet45docker' -Port 80 \\\ -PhysicalPath 'c:\\app' -ApplicationPool '.NET v4.5'\\EXPOSE 80\COPY $source .
\\

现在我们就可以发布站点并用docker打包了,进入到发布完成的目录,运行命令:

\\
\docker build -f Dockerfile.windows -t tailspintoys:win-v1 .
\\

8e348fbaf0df239be76eda6c58ea7cd4.png

\\

打包完成,运行并获取容器ip地址:

\\
\docker run -itd -p 81:80 --name tp tailspintoys:win-v1\docker inspect -f \"{
{ .NetworkSettings.Networks.nat.IPAddress }}\" tp
\\

626209868903a4bcc7240aad3afbb816.png

\\

这个项目的源码我已经放在了 GitHub上,大家如果想尝试可以从以下地址获取:

\\

https://github.com/lean-soft/TailspinToys-docker

\\

作者简介:

\\

徐磊:一名写了十几年代码但还没写够的程序员,微软最有价值专家(MVP)之一。1999年,毕业于北京理工大学工业管理专业和计算机专业;2001年,硕士毕业于UNSW信息工程专业。从事过网管、技术支持、网络、软件开发等工作。2004年加入了SSW();2005年组建SSW中国研发中心任Country Manager;2012年成立独资公司SSW LIMITED BEIJING任GM;2014年创立Lean-Soft,专注于软件工程领域的创新实践。个人博客站点:,微信订阅号 devopshub。

转载地址:http://fgvkx.baihongyu.com/

你可能感兴趣的文章
基于protobuf的RPC实现
查看>>
JAVA的对象复制
查看>>
我的友情链接
查看>>
HAProxy负载均衡原理及企业级实例部署haproxy集群
查看>>
开源中国动弹客户端实践(三)
查看>>
Win 8创造颠覆性体验:预览版关键更新
查看>>
vim在多文件中复制粘贴内容
查看>>
Android ContentObserver
查看>>
文章“关于架构优化和设计,架构师必须知道的事情”
查看>>
疯狂java学习笔记1002---非静态内部类
查看>>
ISA2006实战系列之一:实战ISA三种客户端部署方案(上)
查看>>
TCP服务器
查看>>
U-Mail邮件系统与泛微OA系统一体化操作指南
查看>>
AC旁挂三层交换机管理ap,二层接入ap心得
查看>>
JS中比较数字大小
查看>>
springcloud 学习-eureka搭建-为eureka添加认证
查看>>
jQuery插件的开发
查看>>
基础,基础,还是基础之JAVA基础
查看>>
如何成为一个C++高级程序员
查看>>
ant android 打包签名和渠道
查看>>