Docker实验室:将传统ASP.NET应用现代化(第二部分)——构建Docker镜像

Docker实验室:将传统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

前言

在现代应用开发中,容器化技术已经成为不可或缺的一部分。本文将深入探讨如何将传统ASP.NET WebForms应用打包为Docker镜像,这是应用现代化过程中的关键一步。

容器化的优势

将ASP.NET应用容器化能够带来诸多好处:

  • 资源利用率提升:容器共享主机操作系统内核,减少资源浪费
  • 安全性增强:应用运行在隔离的环境中,减少攻击面
  • 管理集中化:统一的管理接口和部署流程
  • 现代化基础:为后续添加微服务、CI/CD等现代特性奠定基础

Dockerfile设计原则

为ASP.NET应用编写Dockerfile时,应遵循以下原则:

  1. 单一职责:每个容器只运行一个应用进程
  2. 最小化:只安装必要的组件
  3. 可复用:通用配置与特定应用配置分离
  4. 分层优化:合理安排指令顺序以利用缓存

构建ASP.NET应用镜像

基础镜像选择

建议从Windows Server Core基础镜像开始:

# escape=`
FROM microsoft/windowsservercore:10.0.14393.693
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

安装必要组件

通过PowerShell命令安装IIS和ASP.NET:

RUN Add-WindowsFeature Web-server, NET-Framework-45-ASPNET, Web-Asp-Net45; `
    Remove-Website -Name 'Default Web Site'

优化DNS配置

容器环境中需要禁用Windows DNS缓存:

RUN Set-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters' -Name ServerPriorityTimeLimit -Value 0 -Type DWord

应用目录配置

创建应用目录并配置IIS网站:

RUN New-Item -Path 'C:\web-app' -Type Directory; `
    New-Website -Name 'web-app' -PhysicalPath 'C:\web-app' -Port 80 -Force

网络配置

暴露容器端口:

EXPOSE 80

进程监控

使用ServiceMonitor监控IIS服务:

ADD https://github.com/Microsoft/iis-docker/raw/master/windowsservercore/ServiceMonitor.exe C:/ServiceMonitor.exe
ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]

应用配置管理

数据库连接配置

传统应用通常使用LocalDB,但在容器环境中建议:

  1. 将数据库分离到独立容器
  2. 使用明确的连接字符串配置

示例配置:

<connectionStrings>
  <add name="ProductLaunchDb" 
       providerName="System.Data.SqlClient" 
       connectionString="Server=sql-server;Database=ProductLaunch;User Id=sa;Password=d0ck3r_Labs!;"/>
</connectionStrings>

分层构建优化

Docker采用分层存储机制,合理排序指令可显著提升构建效率:

  1. 将变动频率低的指令放在前面
  2. 将应用代码复制放在最后
COPY ProductLaunchWeb/_PublishedWebsites/ProductLaunch.Web /web-app
COPY Web.config /web-app/Web.config

构建流程自动化

完整的构建流程应包括:

  1. 构建编译环境镜像
  2. 运行编译容器生成应用
  3. 构建应用运行镜像

示例PowerShell脚本:

docker build -t dockersamples/modernize-aspnet-builder $pwd\docker\builder

docker run --rm -v $pwd\ProductLaunch:c:\src -v $pwd\docker:c:\out dockersamples/modernize-aspnet-builder C:\src\build.ps1 

docker build -t dockersamples/modernize-aspnet-web:v1 $pwd\docker\web

总结

通过本部分的学习,我们完成了:

  1. 设计了适合ASP.NET应用的Dockerfile
  2. 优化了容器配置以适应Docker环境
  3. 实现了构建流程自动化
  4. 分离了应用配置与环境配置

在下一部分中,我们将探讨如何在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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

俞予舒Fleming

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

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

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

打赏作者

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

抵扣说明:

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

余额充值