記一次Docker中部署Asp.Net Core 3.0的踩坑過程


  最近公司打算重構目前直銷報單系統到微信小程序中,目前的系統只能在PC上面使用,這兩年也搞過App端,但是由於人員流動和公司架構調整最后都不了了之,只留下一堆寫了一半的接口。以前的接口依然是使用Asp.Net Framework實現的,而.Net的處境也很窘迫,很多.Neter也都轉想Java或Pythod的懷抱了,自己也在學Java,但作為一個工作了6年的.Neter,要放棄.Net實在也有些不甘,或者說在轉java的過程中對未來的不確定性讓自己也猶豫了好久,直到.Net Core發展到3.0,我在部門對.Net Core進行了分享,這一次的接口重構也落到我的手上,那么無可厚非,我建議使用.Net Core來實現,從架構搭建到實現,我將盡力去做好它。

  周五的時候,架構搭的七七八八,實現了登錄功能后,在我將其部署到開發服務器上時,在我從官網中(https://dotnet.microsoft.com/download/dotnet-core/3.0)下載完運行環境,在服務器上安裝完IIS的捆包運行包,將項目部署到IIS上之后,項目正常運行,過了會運維同事告知其他原先的.Net FrameWork站點應用程序池全部停止了,重啟后只要一訪問就自動停止,無法訪問,隨后他即卸載了我剛安裝的運行環境,原先的站點也能訪問了,目前我也還沒找出是什么原因導致的,在我自己的電腦上是完全沒有問題的,不知道是什么環境導致這個問題,如在你看到這篇文章的時候知道這個情況,煩請告知一二,謝謝。

  好吧,我先不折騰IIS上的問題,決定將其部署到Docker好了。

  於是就開始了這次的踩坑歷程了。

  首先我在項目中添加了Docker支持,VS2019自動在項目文件夾下生成了Dockerfile文件,如下

FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["src/H.Cms.Web.Api/H.Cms.Web.Api.csproj", "src/H.Cms.Web.Api/"]
COPY ["src/H.Cms.Infrastructure/H.Cms.Infrastructure.csproj", "src/H.Cms.Infrastructure/"]
COPY ["src/H.Cms.Core/H.Cms.Core.csproj", "src/H.Cms.Core/"]
COPY ["src/H.Cms.Application/H.Cms.Application.csproj", "src/H.Cms.Application/"]
COPY ["src/H.Cms.Web.Core/H.Cms.Web.Core.csproj", "src/H.Cms.Web.Core/"]
RUN dotnet restore "src/H.Cms.Web.Api/H.Cms.Web.Api.csproj"
COPY . .
WORKDIR "/src/src/H.Cms.Web.Api"
RUN dotnet build "H.Cms.Web.Api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "H.Cms.Web.Api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "H.Cms.Web.Api.dll"]

  接下來我將整個項目上傳到我的虛擬機centos 7上,開始使用下面的pscp命令時,坑來了,文件夾名稱不能有空格。

pscp -r F:/aspnet core/hcms root@192.168.143.122:/usr/soft

  好吧,無奈換成Secure Shell Client來上傳,完成后,我使用putty登錄我的虛擬機centos7,進入/root/source/HCms項目中,進入H.Cms.Web.Api目錄中,使用docker build構建鏡像時,提示錯誤了

docker build -t docker build -t jesen/hcms:1.0 .

  查看了下Dockerfile文件,好吧,Dockerfile文件從src開始,我把它拷貝到src同目錄中,再次運行docker build ,這下果然,正常運行了,開始docker中不存在.netcore 3.0的環境,需要先下載安裝,但是過程很緩慢,於是我去睡了個午覺,醒來后果然下好了,但是到了dotnet restore命令的時候,一直報api.nuget.org訪問不了,天了嚕,我從瀏覽器上直接訪問沒問題啊。這個問題花了我好久,最終我想說那我不在docker中restore了吧,我把項目發布出來在直接在docker中發布好吧,於是在VS中我選擇了linux-x64的平台發布,欸,問題來了,也是報api.nuget.org訪問不了,但這個時候有個ip了23.101.10.141,在 https://site.ip138.com中查詢了一下,香港的ip,我想,最近香港暴力事件很嚴重,不是影響了吧,抱着試一試的心態,我通過修改host文件 ,添加了指向新加坡的IP,刷新DNS解析

104.215.155.1 api.nuget.org
ipconfig /flushdns

  重新在VS中發布,天了嚕,真的發布成功了,好吧,那我就把虛擬機的/etc/hosts文件也添加這個IP解析吧,果不其然,在我再次運行docker build的時候,雖然等了一會,最后成功了,真的成功了。

  docker build 構建好鏡像后,接下來就是要運行鏡像,看看是否能正常在docker中運行了,運行docker run

docker run -d -p 8002:80 -v ~/docker/aspnetcore/hcms/conf/appsettings.json:/app/appsettings.json -name hcms jesen/hcms:v1.0

  開始我將掛載的appsettings.json文件寫成了文件夾,報錯了,沒有注意到是這個問題,然后就用docker exec命令去查看docker容器里的hcms,發現沒問題

docker exec -it hcms sh

  回來找完才知道是文件不存在,好吧,將~/docker/aspnetcore/hcms/conf/appsettings.json/目錄刪掉,新建appsettings.json文件,將配置信息也拷貝到該文件上,修改數據庫鏈接IP地址,在主機上使用虛擬機的IP地址進行訪問,頁面正常加載。

 

   但是當我訪問某個API時,報錯了,我想應該是數據庫鏈接IP訪問不到,於是看了主機的防火牆,開着的,好吧,加了入站規則,放開1433端口,再次訪問,正常了。

 

 

  以上就是將Asp.Net Core 3.0部署到docker上的過程,雖然花了一些時間,但也總算完美運行起來了,這讓我在接下來的項目中勇敢的提倡使用.Net Core來開發增加了信心,加油!

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM