0

I am new to docker and AKS, I am working on a .Net project that is migrated from .Net core 3.1 to .Net 6 , I am trying to containerize and deploy to AKS. First i wanted to test in the local machine so i had setup docker in the macbook m1 and followed this link https://learn.microsoft.com/en-us/visualstudio/mac/docker-quickstart?view=vsmac-2022 to create a dockerfile, I am able to run the dockerfile from Visual Studio if i follow the steps given in the link but if i run docker compose command from terminal i am getting issues with SDK version, however what i am trying to achieve is remove the build stage and directly run the .net application as the build stage is taken care by Jenkins and the DLL is placed in a folder

Here is the complete dockerfile with all the stages

FROM mcr.microsoft.com/dotnet/core/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:6.0 AS build
WORKDIR /src
COPY DockerDemo/DockerDemo.csproj DockerDemo/
RUN dotnet restore "DockerDemo/DockerDemo.csproj"
COPY . .
WORKDIR "/src/DockerDemo"
RUN dotnet build "DockerDemo.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "DockerDemo.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DockerDemo.dll"]

I modified dockerfile excluding build stage, I am taking DLL file from a "lib/net6.0" that is built by jenkins and placed in this folder

FROM mcr.microsoft.com/dotnet/core/aspnet:6.0 AS base
COPY ["lib/net6.0","/src/"]
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM base as final
WORKDIR /app
COPY --from=base /src/ .
ENTRYPOINT["dotnet","DockerDemo.dll"]

If i build the dockerfile the image is getting created but when i run I am getting following error

unhandled exception system.io.filenotfoundexception could not load file or assembly 'NLog, Version=.5.0.0.0

The project is using NLog.Web.ASPNetCore 5.1.4 version, i tried downgrading it to 5.0.0 but i am still getting the same error, i also tried adding just NLog 5.0.0 package but no luck

As i said i am new to Docker and also to the .net development on macbook

My Questions

Q1) Is it possible to exclude the build stage in dockerfile and directly run

Q2) Does the macbook m1 completely supports .Net Core and .Net 6 development so that it can be deployed to AKS via Jenkins pipeline

  • You need to publish the project before copying to docker. – CodingMytra Sep 24 '22 at 07:25
  • Thank you for responding @CodingMytra , So the publish statement has to be there in Dockerfile? – Developer2K Sep 24 '22 at 16:50
  • No outside docker. Output of publish folder should be copied to docker. – CodingMytra Sep 24 '22 at 17:42
  • Yes that is the published one @CodingMytra – Developer2K Sep 26 '22 at 12:44
  • Have you verified the NLog assembly exists in the files that you're copying into the image? – Matt Thalman Sep 26 '22 at 13:59
  • Thank you @CodingMytra and Matt . Was in an impression that dotnet pack is equivalent to publish but i think dockerfile looks for published files using dotnet publish, I did publish and referred to the DLL from that folder and it worked. Can you please let me know Does the macbook m1 completely supports .Net Core and .Net 6 development so that it can be deployed to AKS via Jenkins pipeline – Developer2K Sep 27 '22 at 03:05

0 Answers0