日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

将.net framework 4 部署在docker中的全过程(支持4.0 到 4.8,3.5应该也可以)

發(fā)布時(shí)間:2023/12/4 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将.net framework 4 部署在docker中的全过程(支持4.0 到 4.8,3.5应该也可以) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言:

docker自從誕生之初,就是運(yùn)行在linux系統(tǒng)中,后來windows上也可以運(yùn)行docker了,但是微軟是通過自身的hyper-v技術(shù),在你的windows系統(tǒng)中虛擬出來了一個(gè)小的linux虛擬主機(jī),在它上面跑了個(gè)docker環(huán)境讓你用,從而使你感覺到像是在windows上運(yùn)行docker一樣,但是其鏡像還是運(yùn)行在linux container中。

后來微軟也出了自己的windows container來運(yùn)行windows平臺(tái)下的代碼,例如支持.net framework,且.net framework 只能運(yùn)行在windows container下,不能運(yùn)行在linux container下。若強(qiáng)行在linux container下拉去windows container的鏡像會(huì)報(bào)錯(cuò):no matching manifest for linux/amd64 in the manifest list entries.

我們可以使用docker exec 進(jìn)入容器內(nèi)部看看

windows 容器:

?這些目錄是不是很熟悉~~~~? ?一個(gè)小的windows系統(tǒng),對(duì)于不跨平臺(tái)的.net framework是無法跑在其中的。?

正文

1、在windows上部署docker環(huán)境

下載安裝這個(gè)小鯨魚,直接可以部署docker環(huán)境的可視化工具。desktop docker 僅僅支持win10 pro 或 win10 專業(yè)版,并不支持其他windows版本,我使用win10家庭版安裝后,發(fā)現(xiàn)只能使用linux container,無法切換windows container。這是一個(gè)大坑

下載地址:? ? ? docker-desktop

?安裝完成后,用powshell。輸入命令 docker --version

?證明以安裝成功

因?yàn)槲覀円褂脀indows container,所以記得右鍵托盤中的小鯨魚切換。

成功后,可以先嘗試跑一個(gè)官方的demo

docker run -it --rm -p 8000:80 --name aspnet_sample mcr.microsoft.com/dotnet/framework/samples:aspnetapp

微軟官方操作文檔? ? ?https://docs.microsoft.com/en-us/aspnet/mvc/overview/deployment/docker-aspnetmvc

但是我在操作過程中,還是遇到了一些坑。

2、創(chuàng)建一個(gè).net framework4.0 項(xiàng)目,并為其添加dockerfile

簡(jiǎn)簡(jiǎn)單單寫個(gè)demo,只添加了一個(gè)WebForm1.aspx頁(yè)面。然后對(duì)著項(xiàng)目右鍵=>添加=>docker支持 生成Dockerfile(若沒有docke支持,只需要自己手動(dòng)建一個(gè)同名文件即可),將其資源類型設(shè)為始終復(fù)制。右鍵發(fā)布!

?來到發(fā)布后的文件夾中

?

?此處有個(gè)關(guān)于dockerfile位置的大坑,一定要注意文件夾的位置,在.netcore中Dockfile和****.csproj在同一目錄下是沒問題的,但是.net framework又寫奇怪,一定要改為如下的目錄結(jié)構(gòu)

?

?也就是說將Dockerfile提到上一層中,不然COPY命令無法找到本地資源。(我也不知道為啥)?

ps:Dockerfile中的COPY命令:? ?COPY [本地host文件地址]? [鏡像內(nèi)的要存放的文件地址]? ? ?也就是說將本地的發(fā)布文件復(fù)制到鏡像內(nèi)去。

打開這里的Dockerfile進(jìn)行編寫

?內(nèi)容如下:

FROM microsoft/aspnet? ? ? ? ? ? ? ? ? ?(運(yùn)行.net framework的基礎(chǔ)鏡像,其中包括sdk? 和 iis,以為.net framework不像.netcore有kerstrel支持其自己跑起來,所以必須要有個(gè)iis來輔助,這個(gè)鏡像中的iis僅支持64的發(fā)布程序,不支持32位)
WORKDIR /inetpub/wwwroot ?? ? ? ? ?(鏡像中發(fā)布文件的存放地址,這個(gè)地址不能變。)

COPY net40 .          (傳輸文件到鏡像中,我的這個(gè)"net40"對(duì)應(yīng)Dockerfile同級(jí)的發(fā)布文件的文件夾。? 文件目錄一定不能錯(cuò))

若目錄層級(jí)不對(duì),會(huì)報(bào)錯(cuò)?COPY failed: file not found in build context or excluded by .dockerignore

3、創(chuàng)建鏡像

打開powshell,進(jìn)入Dockerfile所在目錄,輸入命令創(chuàng)建鏡像

docker build . -t net40

?如果你第一次拉去這個(gè)aspnet的鏡像會(huì)非常慢,建議更換鏡像源。? ? ? https://mirror.baidubce.com ?這個(gè)是百度的鏡像源

? 等待完成后,使用命令將鏡像運(yùn)行起來

docker run -it -d -p 8040:80 net40

-d 后臺(tái)運(yùn)行

-p 暴漏出的端口? ? ?8040:40 將鏡像中的80端口映射到本地的8040端口,framework默認(rèn)運(yùn)行在鏡像中的iis上的就是80端口,無需代碼中修改

net40? 是上述image鏡像的名字

4、瀏覽器預(yù)覽

打開本地瀏覽器,localhost:8040/WebForm1.aspx

?成功

?如果報(bào)錯(cuò)404 或者 403 , 那一定是copy命令或目錄層級(jí)的問題,使用docker exec進(jìn)入到容器/inetpub/wwwroot中,多半是空的

5、log日志寫在本地,需要持久化問題

對(duì)于.net framework項(xiàng)目,多半是老項(xiàng)目,日志文件一般都會(huì)寫在本地,但如果鏡像重啟或刪除,日志文件也隨之消失。

解決此問題可以使用docker volume掛載卷,將/inetpub/wwwroot下的代碼都掛載在一個(gè)本機(jī)的文件夾下,這樣就不會(huì)丟失了,具體命令

docker run -it -d -p 8040:80 -v D:\share\Net40\net40:C:\inetpub\wwwroot test40

D:\share\Net40\net40 本機(jī)地址,持久化的地址
C:\inetpub\wwwroot docker鏡像中的地址? ? '\inetpub\wwwroot'? 與上述WORKDIR地址對(duì)應(yīng)

總結(jié)

以上是生活随笔為你收集整理的将.net framework 4 部署在docker中的全过程(支持4.0 到 4.8,3.5应该也可以)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。