您的位置:首页 > 运维架构 > Docker

Docker4Dev#7 使用 Windows Container运行ASP.NET MVC 2 + SQLExpress 应用

2017-02-16 07:19 736 查看
上一篇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密码:



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



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



然后在项目中添加 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 .



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

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



这个项目的源码我已经放在了 GitHub上,大家如果想尝试可以从以下地址获取:https://github.com/lean-soft/TailspinToys-docker

相关文章:

Docker4Dev #6 使用 Windows Container 运行.net应用

推荐一个培训
基于Docker的DevOps实战培训】是由徐磊老师主讲的三天封闭式课程,地点北京,时间2017年03月24-26日。课程结合了徐磊老师多年来在DevOps上的实践经验和Docker技术,具有很强的实战意义。详细内容及报名方式点击“阅读原文”。







内容转载自公众号



DevOps

了解更多

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: