Check Docker Support on the next screen. As this is a ASP.Net application so only Windows Container is supported.
Click Create and there will be pulling of Docker Image for Windows Server Core will be started on a separate command prompt.
The output window of Visual Studio will be shown something like this
Once done this will try to run the project from Docker Image. But it didn’t work for me !
Let’s remove the image from Docker.
Find the image at Power Shell
It’ll be something like aspwebapp4docker:dev. Stop it and then remove
docker stop aspwebapp4docker:dev
docker rm aspwebapp4docker:dev
Now go to the Docker File at the project directory. It’ll be look like:
Let’s comment out this code using #infront of each line. Yes, that’s how we comment a docker file.
Now We’ll publish the application before put it into docker.
From Visual Studio Solution Explorer Select Publish.
We’ll publish it locally. Select folder to publish on next screen and put the folder name on subsequent screen.
Finally do Publish
This publish folder will be available at your project root directory bin folder.
Now we’ll tell Docker to use this location to build the image
Open the Docker File and put the following:
COPY ./bin/app.publish/ /inetpub/wwwroot
Here we are instructing to use the windows server core image and copying the published application to /inetpub/wwwroot
Now we’ll build the project form Windows Power Shell. Please note that as we are already done with pulling the windows server from Microsoft Container Registry while creating the project so this time it will use the cache to proceed.
At Power Shell change location to project root directory. Now build the project
docker build -t aspwebapp4docker .
The image is named to aspweb4docker. We can also do a tagging using the name:tag format. As we are not assignign any tag so the default tag is set to latest.
Now run the image
docker run -d -p 4000:80 --name aspwebapp4docker1.0 aspwebapp4docker
Enable Docker on the next screen and select Linux as container type
Now make some changes at the index.cshtml file to display some customize text after we’ve deployed. Change at Line No 9 to Learn about building Web apps with ASP.NET Core and deploying at Docker.
Let’s have a look at the Docker file which is created automatically by Visual Studio.Net
The Docker file contains build instruction to deploy the image at Docker. This is known as Docker Multistage build feature. The multistage build allows container images to be created in stages that produce intermediate images.
At the top the Docker Multistage build file following section is telling Docker to create ASP.Net image from Microsoft Container Registry. It’s creating an intermediate image named base that exposes Port 80 and set working directory to /app
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
The next stage is Build which starts with a different original image from registry which is sdk. The sdk image has the build tools and it’s quite bigger than the aspnet image. The aspnet image only contains the runtime.
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["CoreWebApp4Docker.csproj", "."] RUN dotnet restore "./CoreWebApp4Docker.csproj" COPY . . WORKDIR "/src/." RUN dotnet build "CoreWebApp4Docker.csproj" -c Release -o /app/build
The next step is publishing the image from build
FROM build AS publish RUN dotnet publish "CoreWebApp4Docker.csproj" -c Release -o /app/publish /p:UseAppHost=false
The final stage is using the base which have only the runtime and copy the recently published folder to the final image. As the final image is only containing the runtime so it’ll be quite smaller that the build image.
FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "CoreWebApp4Docker.dll"]
So we are done with the Dockerfile. Visual Studio 2022 have built in feature to build the application as Docker image.
However we won’t do this. We’ll use WSL command line to build the application.
At first run your Docker Desktop and ensure that you are running Linux Container. If you find the option to “Switch to Windows Containers…”, this means you are on Linux Container.
Open Ubuntu Command Shell and see whether Docker is running:
If you find docker help is showing that means Docker is running as Linux container
Build the image using the Docker file created by Visual Studio
Browse to the directory where Docker File exists
For me it is
Note that at WSL your Windows drive will be mounted under /mnt/
Now build using docker build
docker build -t corewebapp4docker .
We named the build as corewebapp4docker and the . at the end indicates the current directory where Docker Files exists
The name can be given as name:tag format otherwise it’ll be tagged as corewebapp4docker:latest
The output will be like this:
Now we’ll run the image
docker run -d -p 5000:80 --name corewebapp4docker1.0 corewebapp4docker
The -d is telling to run the image at background and show the container Id only. -p is saying to map host port 5000 to Docker port 80. --name is naming the image and the last one is the image name that we’ve used during build.