ASP.NET Web 應用 Docker踩坑歷程發表後,也開始使用Docker了,然而發佈的過程比較痛苦,經常發生下圖的事情: 據說是nuget包還原時發生錯誤 百度了半天也找不到解決的方法,而發生的概率有相當高,很是無語。 仔細看了自動生成的Dockerfile FROM mcr.microso ...
ASP.NET Web 應用 Docker踩坑歷程發表後,也開始使用Docker了,然而發佈的過程比較痛苦,經常發生下圖的事情:
據說是nuget包還原時發生錯誤 百度了半天也找不到解決的方法,而發生的概率有相當高,很是無語。
仔細看了自動生成的Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
大致意思是把源代碼複製到本地Docker,然後還原、編譯、發佈...,於是我在想能不能自己完成發佈呢?於是把Dockerfile文件改成如下形式:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY Publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
然後在項目文件夾寫了個批處理文件Publish.bat
echo off
echo -----------------1.開始發佈
dotnet publish -o Publish --os linux
echo -----------------2.生成鏡像
docker build -t catzhou2021/test -f Dockerfile .
rd publish /Q/S
echo -----------------------3.推送鏡像
docker push catzhou2021/test
echo -----------------------4.完成
timeout /t 50
echo on
嘿嘿,嘿嘿嘿,還真可以。不過存在以後不方便:
- 發佈之前必須手動保存所有文件
- 必須到項目文件夾雙擊Publish.bat文件