Introduction

Modern application development is no longer just about writing code and running it on your local machine. Today, applications need to run smoothly across different environments like development, testing, and production. This is where containerization comes in.

If you have ever faced issues like "it works on my machine but not on server", then tools like Docker and Kubernetes are the solution.

In this guide, we will understand everything in a very simple and practical way. You will learn what Docker is, what Kubernetes does, how they are different, and most importantly, how you can containerize your .NET application step by step.

What is Docker?

Docker is a tool that helps you package your application along with everything it needs to run.

This includes:

Normally, when you run an app on another machine, it may fail because something is missing. Docker solves this problem by creating a "container".

A container is like a ready-made box that has everything inside it. You can run this box anywhere, and it will behave exactly the same.

In simple words:
Docker makes your application portable and consistent.

What is Kubernetes?

Kubernetes is used when you have multiple containers and you want to manage them efficiently.

Imagine you have:

Now you need:

Kubernetes handles all of this for you automatically.

It can:

In simple words:
Kubernetes manages containers at a large scale.

Docker vs Kubernetes (Core Difference)

FeatureDockerKubernetes
Main RoleCreates containersManages containers
UsageRun single appRun large systems
ScalingManualAutomatic
ComplexityEasy to startAdvanced system

Think like this:

How Docker and Kubernetes Work Together

Docker and Kubernetes are not competitors, they work together.

Example:
You build a .NET app → package it using Docker → deploy it using Kubernetes

What is Containerization?

Containerization means packaging your application in such a way that it runs the same everywhere.

Without containers:

With containers:

This improves:

Step-by-Step: Containerize a .NET Application

Now let’s do the practical part in simple steps.

Step 1: Create a .NET Project

First, create a basic .NET Web API project.

dotnet new webapi -n DockerDemo
cd DockerDemo

This creates your application which we will containerize.

Step 2: Create a Dockerfile

A Dockerfile is a set of instructions that tells Docker how to build your container.

Create a file named Dockerfile in your project folder.

FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o /app/publish

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

Let’s understand this in simple words:

This is called a multi-stage build and helps keep your image small.

Step 3: Build Docker Image

Now we create a Docker image from the Dockerfile.

docker build -t dotnet-app .

This command:

Step 4: Run the Container

Now run your application inside a container.

docker run -d -p 8080:80 dotnet-app

Explanation:

Now open browser:

http://localhost:8080

Your .NET app is now running inside Docker.

Step 5: Use Docker Compose (For Multiple Services)

If your app has multiple services (like API + database), Docker Compose helps manage them.

Example:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "8080:80"

Run:

docker-compose up

This starts all services together.

Step 6: Deploy to Kubernetes

Kubernetes uses configuration files to run containers.

Example deployment file:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dotnet-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: dotnet-app
  template:
    metadata:
      labels:
        app: dotnet-app
    spec:
      containers:
      - name: dotnet-app
        image: dotnet-app
        ports:
        - containerPort: 80

This means:

Apply using:

kubectl apply -f deployment.yaml

Best Practices for Containerizing .NET Applications

Real-World Use Cases

You can use Docker and Kubernetes in:

Conclusion

Docker and Kubernetes are essential tools for modern development. Docker helps you package your application, and Kubernetes helps you run it at scale.

By learning containerization, you make your .NET applications more reliable, scalable, and ready for production environments.

Start small by containerizing a single app, and gradually move towards using Kubernetes for large systems.