2 传统.NET 4.x应用容器化


2 传统.NET 4.x应用容器化

文章插图
| 总结/Edison Zhou
上一篇我们基于Windwos Server 2019 with Container初步跑了一个ASP.NET WebForm应用程序 。本篇我们来自己编译部署一个ASP.NET MVC应用程序到Windows Container 。
1 准备工作
这里我们直接从github上clone微软官方的dotnet-docker-samples项目,找到其中的aspnetmvc子项目 。
github地址:https://github.com/Microsoft/dotnet-framework-docker
这是一个基于.NET 4.8的ASP.NET MVC应用程序,它运行起来和之前的ASP.NET WebForm的Sample一模一样,这里就不再演示 。
2 传统.NET 4.x应用容器化

文章插图
clone下来后,在VS中编译一下然后发布一下Release文件,最后将Release文件复制到阿里云ECS的文件目录下 。
2 直接通过aspnet镜像运行
首先,假设我们将其放到了C:\Releases\aspnetmvcapp目录下:
2 传统.NET 4.x应用容器化

文章插图
这里需要注意的是:和.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/. ./很简单,就三行搞定,拉取运行环境镜像aspnet:4.8,设置工作目录为/inetpub/wwwroot,最后将Publish文件目录下的所有文件拷贝至容器的工作目录之内,完事儿 。
然后,就是熟悉的build镜像过程了,还是原来的味道:
> docker build -t reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp .Sending build context to Docker daemon 26.29MBStep 1/3 : FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8 AS runtime ---> 451a15b86af7Step 2/3 : WORKDIR /inetpub/wwwroot ---> Running in fe87a7e897caRemoving intermediate container fe87a7e897ca ---> 8737f6c38bfbStep 3/3 : COPY Publish/. ./ ---> 419e149fcfc9Successfully built 419e149fcfc9Successfully tagged reg.edisonzhou.cn/dotnet/samples:aspnetmvcapp生成的镜像到底有多大?8.48G!
> docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEreg.edisonzhou.cn/dotnet/samples aspnetmvcapp 419e149fcfc9 12 seconds ago 8.48GBmcr.microsoft.com/dotnet/framework/aspnet 4.8 451a15b86af7 4 weeks ago 8.45GB可以看到,基础运行镜像aspnet:4.8就有8.45G,我们打包出来的只多了300M左右 。
为啥aspnet:4.8这个镜像这么大?通过浏览docker hub对应镜像的主页,我们可以了解到,这个镜像包括了以下几个组成部分:
2 传统.NET 4.x应用容器化

文章插图
翻译过来就是下面这几个部分:
(1) 操作系统镜像:Windows Server Core
(2) WebServer:IIS 10
(3) 基础框架:.NET Framework
(4) 框架扩展:.NET Extension for IIS
其中,操作系统镜像是最大的内容 。关于这个镜像的细节,可以浏览:https://hub.docker.com/_/microsoft-dotnet-framework-aspnet
最后,我们可以直接基于我们打包的镜像来run一个容器实例了:
p>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 访问到,和上一篇的效果一模一样 。
2 传统.NET 4.x应用容器化

文章插图
3 通过sdk编译打包一体化


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: