This is just cheat sheet of commands and terminology for Docker and ASP.NET Core; It contains commands that you can find in the original cheat sheet, but also a Dockerfile for ASP.NET Core and a quick guide on how to created it from Visual Studio. Hopefully, developers that are in the process of getting into the containerize world with Docker and developers that are already in but need a quick recap will find it useful.
Dockerfile
sampleLiving in the root of the application, a Dockerfile
is just a plain text file; you can either use the following command to create it in Windows, or anyway you like: copy NUL Dockerfile
. The sample below contains everything necessary to build and run an image. Comments above each command attempt to provide a bit of clarity:
# This is a sample Dockerfile for building and running ASP.NET Core applications
# This is part of the cheat sheet at https://blog.georgekosmidis.net/2020/06/12/docker-cheat-sheet-for-dotnet-core/
# Pull ASP.NET Core 3.1 runtime and give the name 'base'
# More info on 'FROM' instruction here: https://docs.docker.com/engine/reference/builder/#from
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
# Set the ports where the container listens at runtime
# More on the 'EXPOSE' instruction here: https://docs.docker.com/engine/reference/builder/#workdir
EXPOSE 80
EXPOSE 443
# Pull the ASP.NET Core 3.1 SDK and give the name 'build'
# The SDK runs an app on ports 5000 and 5001, that's why we also need runtime
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
# Set the Working Dir to '/src'. This is where the source code is
# The WORKDIR instruction sets the working directory for any
# RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow
# More on the 'WORKDIR' instruction here: https://docs.docker.com/engine/reference/builder/#workdir
WORKDIR /src
# Copy your projects
# More on the 'COPY' instruction here: https://docs.docker.com/engine/reference/builder/#copy
COPY ["Name.Of.Your.Project.csproj", "Name.Of.Your.Project./"]
COPY ["Dependancy.Of.Your.Project.csproj", "Dependancy.Of.Your.Project./"]
# Run in a shell, in this case run 'dotnet restore'
# More the 'RUN' instruction here: https://docs.docker.com/engine/reference/builder/#run
RUN dotnet restore "RegistrationService.Web/RegistrationService.Web.csproj"
COPY . .
WORKDIR "/src/RegistrationService.Web"
RUN dotnet build "RegistrationService.Web.csproj" -c Release -o /app/build
# Run the publish command using the SDK named as 'build'
FROM build AS publish
RUN dotnet publish "RegistrationService.Web.csproj" -c Release -o /app/publish
# Pull 'base' image and name it as 'final' to allow pull access for publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
# Set the entry point, in other words, what to run!
# More on the 'ENTRYPOINT' instruction here https://docs.docker.com/engine/reference/builder/#entrypoint
ENTRYPOINT ["dotnet", "RegistrationService.Web.dll"]
If it happens to have a Visual Studio around, just right click on your main project, select ‘Add’ and then ‘Docker Support…’:
.
Usually, for ASP.NET Core, I choose ‘Linux’ as Operating System; at the end it comes cheaper if you want to host it, for example, in Azure.
#docker #devops #dotnet #developer