写点什么

Docker4Dev #7 新瓶装老酒 – 使用 Windows Container 运行 ASP.NET MVC 2 + SQLExpress 应用

  • 2017-08-21
  • 本文字数:1434 字

    阅读完需:约 5 分钟

上一篇 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

作者简介:

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

2017-08-21 08:041856

评论

发布
暂无评论
发现更多内容

多国探路数字货币

CECBC

数字货币

Serverless 如何落地?揭秘阿里核心业务大规模落地实现

阿里巴巴云原生

阿里巴巴 阿里云 Serverless 开发者 云原生

分布式事务框架 seata-golang 通信模型详解

阿里巴巴云原生

数据库 微服务 云原生 Go 语言

区块链加速产业革命,打造畜禽养殖业发展新途径

CECBC

养殖业

我哭了!Centos6停止更新只能切换7,哪些习惯也需要切换

996小迁

Java 架构 面试 Centos6

《迅雷链精品课》第十二课:PoW共识算法

迅雷链

区块链

三分钟看懂新一代.Net Core3.1工作流引擎平台

Philips

敏捷开发 工作流

训练营第八周总结

大脸猫

极客大学架构师训练营

最简单的Go Dockerfile编写姿势,没有之一!

万俊峰Kevin

Docker Dockerfile Go 语言

让垃圾分类开发“极快致简”的好物件,零基础的开发小白也能轻松驾驭它!

华为云开发者联盟

数据 分类

【得物技术】MySQL多表关联同步到ES的实践

得物技术

MySQL 原理 配置 ES 多表join

话题讨论 | 程序员自己电脑中毒是甚么体验?

xcbeyond

话题讨论

滴滴DoKit-功能介绍之文件同步助手

工具 文件 DoKit

官方活动 | 盘点2020有奖征文

InfoQ写作社区官方

盘点2020 热门活动

我哭了!Centos6停止更新只能切换7,哪些习惯也需要切换

小Q

Java Linux centos 学习 面试

使用LiteOS Studio图形化查看LiteOS在STM32上运行的奥秘

华为云开发者联盟

LiteOS 脚本 语言

海阔天空的游戏出海,HMS生态提供的风帆与通路

脑极体

开除AI伦理学家,谷歌如何从“不作恶”到“不宽容”?

脑极体

华为云亮相QCon2020深圳站,带你体会大厂的云原生玩法与秘诀

华为云开发者联盟

专家 华为云 深圳

什么是802.11ax(Wi-Fi 6)

云上的移动性能测试平台

移动研发平台EMAS

阿里云 测试 移动研发平台

Redis为什么用跳表而不用平衡树?

Java架构师迁哥

一周信创舆情观察(11.30~12.6)

统小信uos

装机必备:借用IDM实现百度云高速下载

懒得勤快

LeetCode题解:515. 在每个树行中找最大值,DFS,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

跨专业零基础校招拿到网易18K*13薪Java岗offer全过程复盘总结

Java架构师迁哥

Spark-submit执行流程,了解一下

华为云开发者联盟

spark 技术 流程

Singleton手绘

raox

极客大学架构师训练营

训练营第八周作业

大脸猫

极客大学架构师训练营

构师训练营第八周学习笔记

李日盛

笔记

如何判断一个区块链项目是否优质?

CECBC

开源

Docker4Dev #7 新瓶装老酒 – 使用 Windows Container运行ASP.NET MVC 2 + SQLExpress 应用_微软_徐磊_InfoQ精选文章