简简单单学docker在群晖nas中构建docker版aspnetcore网站

发布时间 2023-07-31 17:32:12作者: 遥月

琢磨了n天,掉了好多头发,终于可以了,踩坑无数!终于行了!

先来了解下:

1.net运行时runtime和sdk,简单来说就是sdk开发用的,runtime是用来运行的,所以构建dockerfile只用runtime就够了!

2.docker运行不需要打包操作系统如ubuntu等进入包内!特殊需要的可以!这个问题都必须了解!

正式开始

1.用vs2022完成aspnet网站的建设和测试,我用的是blazorserve框架,一样的,先发布

2.创建Dockerfile文件,最好放在项目文件夹外面.

用vs2022项目右键添加docker支持,创建的dockfile如下

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base          这是dotnet运行时,必须的
WORKDIR /app        相当于cd /app 进入目录,位置是相对dockerfile的位置来说的
EXPOSE 80             容器暴露哪个端口

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build              引入sdk,完全没有必要,开发在本地就可以了,下面的都没用,去掉一个from就是一个层,from多文件就大
WORKDIR /src
COPY ["BlazorApp1.csproj", "."]
RUN dotnet restore "./BlazorApp1.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "BlazorApp1.csproj" -c Release -o /app/build

FROM build AS publish                                                                              从上一步as build层中发布网站到publish目录
RUN dotnet publish "BlazorApp1.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final                     以运行时为基础打包
WORKDIR /app
COPY --from=publish /app/publish .      从publish环境中复制出来发布的文件到app目录
ENTRYPOINT ["dotnet", "BlazorApp1.dll"]      运行

太复杂了,很多用不到,一个from就是一个文件层,from多文件就庞大,