传统.NET 4.x应用容器化体验(2)

爱谁谁
发布: 2025-09-17 08:15:23
原创
300人浏览过

在上一篇文章中,我们使用windows server 2019 with container初步运行了一个asp.net webform应用程序。本文将详细介绍如何编译并部署一个asp.net mvc应用程序到windows container。

  1. 准备工作

我们直接从GitHub上克隆微软官方的dotnet-docker-samples项目,并找到其中的aspnetmvc子项目。

GitHub地址:https://www.php.cn/link/b081b509da27866728d73c3f5d75ccaf

这个项目是一个基于.NET 4.8的ASP.NET MVC应用程序,运行效果与之前的ASP.NET WebForm示例相同,这里不再展示。

传统.NET 4.x应用容器化体验(2)

克隆下来后,使用VS编译并发布Release文件,最后将Release文件复制到阿里云ECS的文件目录中。

  1. 直接通过aspnet镜像运行

假设我们将文件放置在C:\Releases\aspnetmvcapp目录下:

传统.NET 4.x应用容器化体验(2)

需要注意的是:与.NET Core不同,Dockerfile需要放在Release文件目录之外,而在.NET Core中,Dockerfile可以放在Release文件目录内。

接下来,我们来看一下Dockerfile的编写方式。

# 运行环境
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
# 工作目录
WORKDIR /inetpub/wwwroot
# 拷贝文件
COPY Publish/. ./
登录后复制

这个Dockerfile非常简洁,只需三行代码:拉取aspnet:4.8运行环境镜像,设置工作目录为/inetpub/wwwroot,最后将Publish目录下的所有文件复制到容器的工作目录中。接下来是熟悉的构建镜像过程:

> docker build -t reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp .
Sending build context to Docker daemon  26.29MB
Step 1/3 : FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
 ---> 451a15b86af7
Step 2/3 : WORKDIR /inetpub/wwwroot
 ---> Running in fe87a7e897ca
Removing intermediate container fe87a7e897ca
 ---> 8737f6c38bfb
Step 3/3 : COPY Publish/. ./
 ---> 419e149fcfc9
Successfully built 419e149fcfc9
Successfully tagged reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp
登录后复制

构建的镜像大小为8.48G:

> docker images
REPOSITORY                                   TAG            IMAGE ID       CREATED          SIZE
reg.edisonzhou.cn/dotnet/samples                    aspnetmvcapp   419e149fcfc9   12 seconds ago   8.48GB
mcr.microsoft.com/dotnet/framework/aspnet    4.8            451a15b86af7   4 weeks ago      8.45GB
登录后复制

可以看到,基础运行镜像aspnet:4.8已经有8.45G,我们打包的镜像只增加了大约300M。

aspnet:4.8镜像为何如此庞大?通过浏览Docker Hub对应镜像的主页,我们了解到,这个镜像包括以下几个部分:

传统.NET 4.x应用容器化体验(2)

这些部分包括:

(1) 操作系统镜像:Windows Server Core

(2) Web服务器:IIS 10

(3) 基础框架:.NET Framework

(4) 框架扩展:.NET Extension for IIS

其中,操作系统镜像是最大的内容。关于这个镜像的更多细节,可以浏览:https://www.php.cn/link/32e22c26cece29777049a84adf05f465

X Studio
X Studio

网易云音乐·X Studio

X Studio 91
查看详情 X Studio

最后,我们可以基于打包的镜像启动一个容器实例:

> docker run --name aspnet_mvc_sample --rm -it -d -p 8000:80 reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp
登录后复制

通过查看容器日志,我们可以确认IIS已经成功启动该站点:

> docker logs aspnet_mvc_sample
Service 'w3svc' has been stopped
Service 'w3svc' started
登录后复制

最终的效果可以通过http://localhost:8000访问,效果与上一篇文章相同。

传统.NET 4.x应用容器化体验(2)

  1. 通过sdk编译打包一体化

我们知道,Dockerfile不仅可以直接引入运行环境镜像,还可以引入sdk镜像来执行编译和打包操作,这在持续集成任务中非常有用。

因此,我们首先修改上面的Dockerfile:

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS build
WORKDIR /app
# 复制csproj并恢复为不同的层
COPY *.sln .
COPY aspnetmvcapp/*.csproj ./aspnetmvcapp/
COPY aspnetmvcapp/*.config ./aspnetmvcapp/
RUN nuget restore
# 复制其他内容并构建应用程序
COPY aspnetmvcapp/. ./aspnetmvcapp/
WORKDIR /app/aspnetmvcapp
RUN msbuild /p:Configuration=Release -r:False
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime
WORKDIR /inetpub/wwwroot
COPY --from=build /app/aspnetmvcapp/. ./
登录后复制

然后,我们将源代码复制到阿里云ECS的C:\Sources\aspnetmvcapp目录下。

传统.NET 4.x应用容器化体验(2)

接下来是熟悉的构建镜像过程:

> docker build -t reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp-v2 .
登录后复制

这个编译过程涉及到Nuget Restore,可能会稍微慢一些。

构建好镜像后,我们再次运行容器实例:

> docker stop aspnet_mvc_sample
> docker run --name aspnet_mvc_sample --rm -it -d -p 8000:80 reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp-v2
登录后复制

最终效果仍然可以通过http://localhost:8000访问。

传统.NET 4.x应用容器化体验(2)

  1. 更多Docker Compose

我们还可以在Windows Server上安装Docker Compose来进行单主机容器编排,Linux上的Docker Compose操作经验可以平滑迁移到Windows Container上:

> Invoke-WebRequest https://github.com/docker/compose/releases/download/1.25.4/docker-compose-Windows-x86_64.exe -UseBasicParsing -OutFile $env:ProgramFiles\docker\docker-compose.exe
> docker-compose version
登录后复制

我们也可以为Windows Container设置资源限制,例如为ASP.NET MVC的示例设置只能使用1个CPU,最大内存限制为1024M:

docker run --name aspnet_mvc_sample --rm -it -d -p 8000:80 --cpus 1 -m 1024m reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp
登录后复制

我们还可以为Windows Container挂载本地文件目录,用于映射应用程序的文件,比如配置文件等:

docker run --name aspnet_mvc_sample --rm -it -d -p 8000:80 --cpus 1 -m 1024m -v C:\IIS\config\aspnetmvcapp:C:\inetpub\wwwroot\Configs reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp
登录后复制
  1. 总结

本文详细介绍了如何在Windows Container下通过Dockerfile实现.NET 4.x应用程序的编译打包构建过程,并以一个ASP.NET MVC的示例演示了整个过程。

下一篇文章中,我们将实现将编译的镜像推送到Harbor私有镜像仓库,并尝试在Windows Server端拉取Harbor中的镜像并运行。

以上就是传统.NET 4.x应用容器化体验(2)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号