Dockerfile
右鍵項目→添加Docker支持,目標OS選擇Linux
添加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命令。
構建鏡像: docker build -t identityserverapi -f .\src\Service\01.IdentityServer\Imtudou.IdentityServer.WebAPI\Dockerfile .
參數-f是指定Dockerfile所在的目錄。
使用 docker images
查看本地鏡像,identityserverapi
就是上面構建完成的鏡像:
啓動容器: docker run -d -p 5000:80 --name identityserverapi01 identityserverapi
- -p: 指定端口映射,格式爲:主機(宿主)端口:容器端口
使用docker ps
查看正在運行中的容器
瀏覽器訪問[http://localhost:5000/swagger/index.html](http://localhost:5000/swagger/index.html)
正常顯示一個簡單的asp.net core web應用就成功運行於docker之中
使用vs2019將項目設置爲Docker啓動
注意,首次容器工具首次加載會比較慢。。。啓動完成後會自動打開瀏覽器,並綁定了一個隨機端口:
可能會遇見的錯誤:“未啓用共享卷。。。”
解決方法:https://docs.microsoft.com/zh-cn/visualstudio/containers/troubleshooting-docker-errors?view=vs-2022
如下配置即可: