Introduction to Docker for .NET Developers

Abnoan Muniz
.Net Programming
Published in
5 min readFeb 26, 2023

Understanding the Benefits and Fundamentals of Docker for .NET Developers

Photo provided by the Author

Greetings, my fellow .NET developers! Today, we will talk about one of the most popular technologies in the world of DevOps: Docker. Now, I know what you’re thinking. “What in the world is Docker, and why should I care?” Well, my friend, Docker is a containerization platform that can help you build and deploy your .NET applications more efficiently than ever before. And if that’s not enough to pique your interest, I’ll sweeten the deal with examples and a healthy dose of humor.

What is Docker, and Why Should I Care?

At its core, Docker is a platform that enables you to package your applications into containers. Containers are like lightweight virtual machines that contain everything your application needs to run, including the code, dependencies, and configurations. With Docker, you can build, ship, and run your applications anywhere, without worrying about the underlying infrastructure. That means you can deploy your .NET applications on any platform, whether your laptop, a server or even in the cloud.

But why should you care about Docker as a .NET developer? For starters, Docker can help you achieve a consistent environment across all your development, staging, and production environments. This means you can avoid the dreaded “it works on my machine” syndrome and ensure your application runs the same way everywhere.

Another benefit of Docker is that it can streamline your deployment process. With Docker, you can create a container image that contains your application and all its dependencies. You can then ship that image to any environment and run it with a simple command. This makes deploying your application to multiple environments easy without worrying about installing dependencies or configuring the environment.

Finally, Docker can also help you improve the scalability and availability of your application. With Docker, you can quickly scale your application by adding more containers. And if one container fails, Docker can automatically spin up a new container to take its place. This means your application can continue to run even if there are issues with the underlying infrastructure.

Getting Started with Docker

Now that we’ve covered the benefits of Docker, let’s dive into some code examples and see how we can package and deploy a .NET application.

First, we need to install Docker on our development machine. You can download Docker from the official website. Once you have Docker installed, you can start by creating a Dockerfile. It is a text file that contains a set of instructions for building a Docker image. Here’s an example Dockerfile for a .NET application:

# Use the official .NET SDK image as a build environment
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env

# Set the working directory
WORKDIR /app

# Copy the project file and restore dependencies
COPY *.csproj ./
RUN dotnet restore

# Copy the source code and build the application
COPY . ./
RUN dotnet publish -c Release -o out

# Use the official runtime image as a base image
FROM mcr.microsoft.com/dotnet/aspnet:6.0

# Set the working directory
WORKDIR /app

# Copy the published output from the build environment
COPY --from=build-env /app/out .

# Expose port 80 for HTTP traffic
EXPOSE 80

# Start the application
ENTRYPOINT ["dotnet", "myapp.dll"]

Let’s break this down. The first line, FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env, specifies that we want to use the official .NET SDK image as our build environment. This image contains everything we need to build our .NET application, including the .NET runtime and the SDK.

The next line, WORKDIR /app, sets the working directory for our application to /app.

The following line, COPY *.csproj ./, copies the project file to the working directory. We then run dotnet restore to restore the dependencies for our application.

Next, we copy the source code to the working directory COPY . ./, and run dotnet publish to build the application in release mode and output the binaries to the out directory.

After building our application, we switch to the official .NET runtime image with FROM mcr.microsoft.com/dotnet/aspnet:6.0. This image contains only the .NET runtime, without the SDK, which makes it smaller and more suitable for production environments.

We set the working directory to /app again and copy the published output from the build environment with COPY --from=build-env /app/out .. Finally, we expose port 80 for HTTP traffic and start the application with ENTRYPOINT ["dotnet", "myapp.dll"].

With our Dockerfile in place, we can now build our Docker image with the following command:

docker build -t myapp .

This command tells Docker to build a new image from the current directory (.) and tag it with the name myapp. Docker will then execute the instructions in our Dockerfile to build the image.

Once the image is built, we can run it with the following command:

docker run -p 80:80 myapp

This command tells Docker to run a container from our myapp image and map port 80 in the container to port 80 on the host machine (-p 80:80). We can then access our application in a web browser at http://localhost.

When you map port 80 in the container to port 80 on the host machine with the -p 80:80 option in the docker run command, Docker automatically forwards traffic from port 80 on the host machine to port 80 in the container so that you can access the application at http://localhost without specifying the port number.

Docker is a containerization platform that can help developers build and deploy their applications more efficiently. With it, you can achieve a consistent environment across all your environments, streamline your deployment process, and improve the scalability and availability of your application.

In this article, we covered the basics of Docker and how it can be helpful for .NET developers. We also provided a code example for building a .NET application with Docker. I hope this article has been informative and entertaining.

FYI, there are some affiliate links in this post. If you buy something through them, I’ll get a little kickback. So if you like what you see, go ahead and click!

Disclosure: A small part of this article has been written with the assistance of AI, and the writer carefully reviews all the content.

--

--

Abnoan Muniz
.Net Programming

Senior .NET Developer, Passionate about problem-solving. Support me: https://ko-fi.com/abnoanmuniz, Get in touch: linktr.ee/AbnoanM