Docker实验室:将传统ASP.NET应用容器化(第三部分)
前言
在现代应用开发中,容器化技术已经成为不可或缺的一部分。本文是Docker实验室系列教程的第三部分,将详细介绍如何将传统的ASP.NET WebForms应用作为Docker容器运行,并解决其数据库依赖问题。
容器化架构概述
在前两部分中,我们已经完成了应用的容器化镜像构建。现在,我们需要考虑应用的运行时架构。如下图所示,我们的应用需要连接SQL Server数据库:
值得注意的是,Docker的网络栈提供了灵活的连接方式,我们可以选择:
- 连接非容器化的远程SQL Server实例
- 使用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)即为应用的访问地址。首次访问可能会有延迟,因为:
- IIS需要启动工作进程
- 应用需要初始化数据库
功能验证
应用主要包含两个功能:
- 产品介绍首页
- 用户注册表单
注册表单收集用户基本信息:
数据验证
我们可以通过多种方式验证数据是否成功存储:
- 使用SQL客户端工具连接数据库
- 在容器内执行SQL查询(无需额外安装客户端)
docker exec sql-server `
powershell -Command `
"Invoke-SqlCmd -Query 'SELECT * FROM Prospects' -Database ProductLaunch"
查询结果将显示所有注册记录,验证了应用的完整功能。
技术要点总结
- 依赖管理:明确应用对SQL Server的依赖关系
- 自动化部署:通过Docker实现了应用部署的标准化
- 环境一致性:确保开发、测试和生产环境的行为一致
- 可移植性:镜像可以在任何支持Docker的环境中运行
后续改进方向
虽然我们已经实现了应用的容器化,但仍有一些可以优化的地方:
- 依赖管理自动化:使用Docker Compose定义多容器应用
- 镜像分发:通过镜像仓库实现团队共享
- 性能优化:引入异步消息处理机制(将在第四部分介绍)
通过本部分的实践,我们已经成功将传统ASP.NET应用迁移到Docker平台,为后续的现代化改造奠定了坚实基础。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考