Docker製作dotnet core程序鏡像



Dockerfile

右鍵項目→添加Docker支持,目標OS選擇Linux
1.gif

添加docker支持後,vs2019會自動幫我們創建Dockerfile文件。Dockerfile就是用來構建鏡像的文件,其中包含了各種指令。以下是Dockerfile指令詳解

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

#使用aspnet:5.0作爲基礎鏡像,起一個別名爲base
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
#設置容器的工作目錄爲/app
WORKDIR /app
#暴露80端口
EXPOSE 80


#使用dotnet sdk:5.0作爲基礎鏡像,起一個別名爲build
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
#設置容器的工作目錄爲/src
WORKDIR /src
#拷貝src/Service/01.IdentityServer/Imtudou.IdentityServer.WebAPI/Imtudou.IdentityServer.WebAPI.csproj項目文件到容器中的src/Service/01.IdentityServer/Imtudou.IdentityServer.WebAPI/目錄
COPY ["src/Service/01.IdentityServer/Imtudou.IdentityServer.WebAPI/Imtudou.IdentityServer.WebAPI.csproj", "src/Service/01.IdentityServer/Imtudou.IdentityServer.WebAPI/"]
COPY ["src/Core/Imtudou.Core.Extensions/Imtudou.Core.Extensions.csproj", "src/Core/Imtudou.Core.Extensions/"]
COPY ["src/Core/Imtudou.Core/Imtudou.Core.csproj", "src/Core/Imtudou.Core/"]
COPY ["src/Core/Imtudou.Core.Logs/Imtudou.Core.Logs.csproj", "src/Core/Imtudou.Core.Logs/"]
COPY ["src/Core/Imtudou.Core.Cache/Imtudou.Core.Cache.csproj", "src/Core/Imtudou.Core.Cache/"]

#執行dotnet restore命令,相當於平時用vs還原nuget包
RUN dotnet restore "src/Service/01.IdentityServer/Imtudou.IdentityServer.WebAPI/Imtudou.IdentityServer.WebAPI.csproj"
#拷貝當前目錄的文件到到容器的/src目錄
COPY . .
#設置容器的工作目錄爲/src/src/Service/01.IdentityServer/Imtudou.IdentityServer.WebAPI
WORKDIR "/src/src/Service/01.IdentityServer/Imtudou.IdentityServer.WebAPI"
#執行dotnet build命令,相當於平時用vs生成項目。以Release模式生成到容器的/app/build目錄
RUN dotnet build "Imtudou.IdentityServer.WebAPI.csproj" -c Release -o /app/build

#將上面的build(dotnet sdk:5.0)作爲基礎鏡像,又重命名爲publish
FROM build AS publish
#執行dotnet publish命令,相當於平時用vs發佈項目。以Release模式發佈到容器的/app/publish目錄
RUN dotnet publish "Imtudou.IdentityServer.WebAPI.csproj" -c Release -o /app/publish

#將上面的base(dotnet sdk:5.0)作爲基礎鏡像,又重命名爲final
FROM base AS final
#設置容器的工作目錄爲/app
WORKDIR /app
#拷貝/app/publish目錄到當前工作目錄
COPY --from=publish /app/publish .
#指定容器入口命令,容器啓動時會運行dotnet Imtudou.IdentityServer.WebAPI.dll
ENTRYPOINT ["dotnet", "Imtudou.IdentityServer.WebAPI.dll"]

Build & Run

來到項目根目錄(帶.sin這一級目錄),啓動PowerShell或cmd執行docker命令。
image.png

構建鏡像:
docker build -t identityserverapi -f .\src\Service\01.IdentityServer\Imtudou.IdentityServer.WebAPI\Dockerfile .參數-f是指定Dockerfile所在的目錄。
image.png
使用 docker images 查看本地鏡像,identityserverapi就是上面構建完成的鏡像:
image.png
啓動容器: docker run -d -p 5000:80 --name identityserverapi01 identityserverapi

  • -p: 指定端口映射,格式爲:主機(宿主)端口:容器端口

image.png
使用docker ps 查看正在運行中的容器
image.png
瀏覽器訪問[http://localhost:5000/swagger/index.html](http://localhost:5000/swagger/index.html)
image.png
正常顯示一個簡單的asp.net core web應用就成功運行於docker之中

使用vs2019將項目設置爲Docker啓動

image.png
注意,首次容器工具首次加載會比較慢。。。啓動完成後會自動打開瀏覽器,並綁定了一個隨機端口:

可能會遇見的錯誤:“未啓用共享卷。。。”
image.png
解決方法:https://docs.microsoft.com/zh-cn/visualstudio/containers/troubleshooting-docker-errors?view=vs-2022
如下配置即可:image.png

參考:https://www.cnblogs.com/xhznl/p/13353095.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章