我通常为此使用 Rider,但出于复制目的,我将使用终端来描述该过程
我创建了一个 .Net 5 Web Api 并希望为其添加 Docker 支持。我试图通过玩一个示例应用程序来了解它。所以使用终端我创建了一个新的 Web Api
mkdir project
cd project
dotnet new sln
dotnet new webapi -o Api
dotnet sln add ./Api
我检查一切都很好cd Api
dotnet run
call https://localhost:5001/weatherforecast in the browser
close with ctrl + c
在 Api 项目中,我使用此内容创建了一个 DockerfileFROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/aspnet
WORKDIR /app
EXPOSE 80
COPY --from=build /app/out .
ENTRYPOINT [ "dotnet", "Rest.dll" ]
我还使用此内容创建了一个 .dockerignore 文件.git
Dockerfile
bin/
obj/
我正在构建图像docker build -t api .
当我现在跑docker images
此图像的大小为 209MB。我想知道这是否是“最佳/正确的方法”,或者我是否可以在 Dockerfile 或 .dockerignore 文件中改进某些内容。提前致谢
最佳答案
您可以将 Dockerfile 建立在较小的镜像上。在 Microsoft container registry (MCR) here 中搜索可用图像的目录,Linux alpine(5.0-alpine)可能是最轻量级的。请注意,对于其他发行版,可能存在常规和超薄变体,其中常规是 SDK 环境,而超薄是生产环境。
然后,您可以按如下方式构建 Dockerfile,以将 SDK 镜像中的构建输出中的人工制品移动到最终的轻量级部署镜像:
FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS base
WORKDIR /app
# Main build (SDK environment)
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
RUN dotnet restore "webapi.csproj"
COPY . .
WORKDIR "/src/webapi"
RUN dotnet build "webapi.csproj" -c Release -o /app/build
# Publish build outputs to /app dir
FROM build AS publish
RUN dotnet publish "webapi.csproj" -c Release -o /app/publish
# Final deployment image
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "api.dll"]
在我的示例中,我在构建阶段使用了 Debian buster SDK 镜像,在部署阶段使用了 buster slim。
关于c# - 如何降低 dockerized .Net Core 应用程序的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65995452/