2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:041967

评论

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

赛事升级,烽烟正燃!网易云信 Innovation 2022 开发者大赛等你参加!

网易智企

开发者大赛

数字化转型趋势|汽车电子软件开发工具链必看

laofo

DevOps cicd 研发效能 持续交付 DevOps工具链

前端必读2.0:如何在React 中使用SpreadJS导入和导出 Excel 文件

葡萄城技术团队

前端 Excel 框架

Spring事务角色与事务属性

十八岁讨厌编程

Java 后端开发 9月月更

FaissPQ索引简介

转转技术团队

深度学习 Faiss 向量计算

常用的注册中心以及他们的对比

想要飞的猪

zookeeper nacos Eureka

客户说你的 SaaS 产品不好用怎么办?

产品海豚湾

产品经理 SaaS 客户关系管理 产品运营 9月月更

Spring事务管理

十八岁讨厌编程

Java 后端开发 9月月更

【云原生 | 从零开始学Kubernetes】四、Kubernetes之YAML文件详解

泡泡

云计算 云原生 k8s 9月月更

用多线程实现归并排序

聚变

归并排序 Lambda函数

Chrome操作指南——入门篇(八)breakpoint

Augus

Chrome开发者工具 9月月更

如何避免这10类常见故障?B站数据库架构设计做了这5步……|TakinTalks稳定性社区

TakinTalks稳定性社区

数据库治理 故障治理

Web3.0杂谈-#002(48/100)

hackstoic

Web3.0

C++学习---__gen_tempname函数原理分析学习

桑榆

c++ 源码分析 9月月更

中移链DDC-SDK技术对接全流程(三)

BSN研习社

异常场景测试

转转技术团队

测试方案 异常测试 用例设计

SpringMVC初识

十八岁讨厌编程

Java 后端开发 9月月更

如何使用禅道集成钉钉

禅道项目管理

钉钉 项目管理工具 禅道

Chrome操作指南——入门篇(九)调试小技巧

Augus

Chrome开发者工具 9月月更

Chrome操作指南——入门篇(十)调试小技巧

Augus

Chrome开发者工具 9月月更

ShareSDK Uni-app 插件

MobTech袤博科技

uni-app ios android

ESP32-C3入门教程 基础篇(七、LEDC — LED PWM 控制器)

矜辰所致

pwm ESP32-C3 9月月更

【Kafka】编译 Kafka 源码并搭建源码环

石臻臻的杂货铺

kafka 9月月更

如何根治 Script Error.

阿里巴巴终端技术

前端 终端 Script

Databend 参加 PingCAP 用户峰会 2022

Databend

数据仓库 开源社区 云平台

JavaWeb核心之ServletConfig

楠羽

Servlet 笔记 9月月更

【云原生 | 从零开始学 Kubernetes】三、Kubernetes集群管理工具kubectl

泡泡

Docker 云计算 云原生 k8s 9月月更

Python语法之流程控制

芯动大师

流程控制 9月月更 嵌套

计算机上的高性能计算,你了解多少?

Finovy Cloud

高性能计算

ESP32-C3入门教程 基础篇(六、TIMG 硬件定时器 与 软件定时器)

矜辰所致

软件定时器 ESP32-C3 9月月更

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