日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

前言:

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

后來微軟也出了自己的windows container來運行windows平臺下的代碼,例如支持.net framework,且.net framework 只能運行在windows container下,不能運行在linux container下。若強行在linux container下拉去windows container的鏡像會報錯:no matching manifest for linux/amd64 in the manifest list entries.

我們可以使用docker exec 進入容器內部看看

windows 容器:

?這些目錄是不是很熟悉~~~~? ?一個小的windows系統,對于不跨平臺的.net framework是無法跑在其中的。?

正文

1、在windows上部署docker環境

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

下載地址:? ? ? docker-desktop

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

?證明以安裝成功

因為我們要使用windows container,所以記得右鍵托盤中的小鯨魚切換。

成功后,可以先嘗試跑一個官方的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、創建一個.net framework4.0 項目,并為其添加dockerfile

簡簡單單寫個demo,只添加了一個WebForm1.aspx頁面。然后對著項目右鍵=>添加=>docker支持 生成Dockerfile(若沒有docke支持,只需要自己手動建一個同名文件即可),將其資源類型設為始終復制。右鍵發布!

?來到發布后的文件夾中

?

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

?

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

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

打開這里的Dockerfile進行編寫

?內容如下:

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

COPY net40 .          (傳輸文件到鏡像中,我的這個"net40"對應Dockerfile同級的發布文件的文件夾。? 文件目錄一定不能錯)

若目錄層級不對,會報錯?COPY failed: file not found in build context or excluded by .dockerignore

3、創建鏡像

打開powshell,進入Dockerfile所在目錄,輸入命令創建鏡像

docker build . -t net40

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

? 等待完成后,使用命令將鏡像運行起來

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

-d 后臺運行

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

net40? 是上述image鏡像的名字

4、瀏覽器預覽

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

?成功

?如果報錯404 或者 403 , 那一定是copy命令或目錄層級的問題,使用docker exec進入到容器/inetpub/wwwroot中,多半是空的

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

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

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

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

D:\share\Net40\net40 本機地址,持久化的地址
C:\inetpub\wwwroot docker鏡像中的地址? ? '\inetpub\wwwroot'? 與上述WORKDIR地址對應

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。