Docker实验室:将传统ASP.NET应用容器化(第三部分)

Docker实验室:将传统ASP.NET应用容器化(第三部分)

labs This is a collection of tutorials for learning how to use Docker with various tools. Contributions welcome. labs 项目地址: https://gitcode.com/gh_mirrors/la/labs

前言

在现代应用开发中,容器化技术已经成为不可或缺的一部分。本文是Docker实验室系列教程的第三部分,将详细介绍如何将传统的ASP.NET WebForms应用作为Docker容器运行,并解决其数据库依赖问题。

容器化架构概述

在前两部分中,我们已经完成了应用的容器化镜像构建。现在,我们需要考虑应用的运行时架构。如下图所示,我们的应用需要连接SQL Server数据库:

v1架构在Docker中的部署

值得注意的是,Docker的网络栈提供了灵活的连接方式,我们可以选择:

  1. 连接非容器化的远程SQL Server实例
  2. 使用Docker容器运行SQL Server

数据库容器化方案

本实验采用了Entity Framework的Code-First开发模式,这意味着应用在首次运行时能够自动创建所需的数据库结构。这为我们提供了极大的便利,因为我们可以直接启动一个空的SQL Server容器,让应用自行初始化数据库。

SQL Server Express容器

Microsoft官方提供了适用于Windows的SQL Server Express Docker镜像。Express版本非常适合开发环境和小型生产环境(当前存储限制为10GB)。使用Docker运行SQL Server Express的优势在于:

  • 每个数据库可以运行在独立的容器中
  • 资源隔离性好
  • 部署简单

启动SQL Server Express容器的命令如下:

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

参数说明:

  • --detach: 后台运行容器
  • --publish 1433:1433: 将容器内的1433端口映射到主机
  • --env: 设置环境变量,包括SA密码和许可协议接受
  • --name: 为容器指定名称,便于网络通信

运行ASP.NET WebForms应用

启动Web应用容器同样简单:

docker run -d -p 80:80 `
 --name web `
 dockersamples/modernize-aspnet-web:v1

此时,使用docker ps命令可以看到两个运行中的容器:SQL Server和Web应用。

访问应用

由于Windows容器的网络特性,我们需要先获取容器的IP地址:

docker inspect --format '{{ .NetworkSettings.Networks.nat.IPAddress }}' web

得到的IP地址(如172.20.250.65)即为应用的访问地址。首次访问可能会有延迟,因为:

  1. IIS需要启动工作进程
  2. 应用需要初始化数据库

v1应用首页

功能验证

应用主要包含两个功能:

  1. 产品介绍首页
  2. 用户注册表单

注册表单收集用户基本信息:

v1注册表单

数据验证

我们可以通过多种方式验证数据是否成功存储:

  1. 使用SQL客户端工具连接数据库
  2. 在容器内执行SQL查询(无需额外安装客户端)
docker exec sql-server `
 powershell -Command `
  "Invoke-SqlCmd -Query 'SELECT * FROM Prospects' -Database ProductLaunch"

查询结果将显示所有注册记录,验证了应用的完整功能。

技术要点总结

  1. 依赖管理:明确应用对SQL Server的依赖关系
  2. 自动化部署:通过Docker实现了应用部署的标准化
  3. 环境一致性:确保开发、测试和生产环境的行为一致
  4. 可移植性:镜像可以在任何支持Docker的环境中运行

后续改进方向

虽然我们已经实现了应用的容器化,但仍有一些可以优化的地方:

  1. 依赖管理自动化:使用Docker Compose定义多容器应用
  2. 镜像分发:通过镜像仓库实现团队共享
  3. 性能优化:引入异步消息处理机制(将在第四部分介绍)

通过本部分的实践,我们已经成功将传统ASP.NET应用迁移到Docker平台,为后续的现代化改造奠定了坚实基础。

labs This is a collection of tutorials for learning how to use Docker with various tools. Contributions welcome. labs 项目地址: https://gitcode.com/gh_mirrors/la/labs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨女嫚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值