最近公司打算重構目前直銷報單系統到微信小程序中,目前的系統只能在PC上面使用,這兩年也搞過App端,可是因爲人員流動和公司架構調整最後都不了了之,只留下一堆寫了一半的接口。之前的接口依然是使用Asp.Net Framework實現的,而.Net的處境也很窘迫,不少.Neter也都轉想Java或Pythod的懷抱了,本身也在學Java,但做爲一個工做了6年的.Neter,要放棄.Net實在也有些不甘,或者說在轉java的過程當中對將來的不肯定性讓本身也猶豫了很久,直到.Net Core發展到3.0,我在部門對.Net Core進行了分享,這一次的接口重構也落到個人手上,那麼無可厚非,我建議使用.Net Core來實現,從架構搭建到實現,我將盡力去作好它。java
週五的時候,架構搭的七七八八,實現了登陸功能後,在我將其部署到開發服務器上時,在我從官網中(https://dotnet.microsoft.com/download/dotnet-core/3.0)下載完運行環境,在服務器上安裝完IIS的捆包運行包,將項目部署到IIS上以後,項目正常運行,過了會運維同事告知其餘原先的.Net FrameWork站點應用程序池所有中止了,重啓後只要一訪問就自動中止,沒法訪問,隨後他即卸載了我剛安裝的運行環境,原先的站點也能訪問了,目前我也還沒找出是什麼緣由致使的,在我本身的電腦上是徹底沒有問題的,不知道是什麼環境致使這個問題,如在你看到這篇文章的時候知道這個狀況,煩請告知一二,謝謝。linux
好吧,我先不折騰IIS上的問題,決定將其部署到Docker好了。docker
因而就開始了此次的踩坑歷程了。數據庫
首先我在項目中添加了Docker支持,VS2019自動在項目文件夾下生成了Dockerfile文件,以下json
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解析centos
104.215.155.1 api.nuget.org
ipconfig /flushdns
從新在VS中發佈,天了嚕,真的發佈成功了,好吧,那我就把虛擬機的/etc/hosts文件也添加這個IP解析吧,果不其然,在我再次運行docker build的時候,雖然等了一會,最後成功了,真的成功了。api
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來開發增長了信心,加油!