Docker & Kubernetes for .NET Developers

Explore the power of containerization with Docker and orchestration with Kubernetes to build, deploy, and manage your .NET applications efficiently.

Why Containers?

Containers encapsulate your application and its dependencies, ensuring consistency across development, testing, and production environments. This eliminates the "it works on my machine" problem and speeds up your deployment pipeline.

Getting Started with Docker

Docker allows you to package your .NET applications into lightweight, portable containers. Here's a basic example of a Dockerfile for a .NET Core web application:

# Use the official .NET SDK image as a build image FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build AS base WORKDIR /app # Copy the project files and restore dependencies COPY *.csproj ./ RUN dotnet restore # Copy the rest of the application code COPY . . # Publish the application RUN dotnet publish -c Release -o out # Use a smaller runtime image for the final stage FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final WORKDIR /app COPY --from=build /app/out . # Expose the port the application runs on EXPOSE 80 # Define the entrypoint ENTRYPOINT ["dotnet", "YourApp.dll"]

To build this image, navigate to your project directory in the terminal and run:

docker build -t my-dotnet-app .

And to run it:

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

Introduction to Kubernetes

Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications. It provides a robust platform for orchestrating your Docker containers at scale.

Key Kubernetes Concepts for .NET

  • Pods: The smallest deployable units, typically containing one container.
  • Deployments: Manage stateless applications, allowing you to define desired state and automatically roll out updates.
  • Services: Define a logical set of Pods and a policy by which to access them, enabling network communication.
  • Ingress: Manages external access to services in a cluster, typically HTTP.

Example: Deploying a .NET App to Kubernetes

You'll typically define your Kubernetes resources in YAML files. Here's a simplified example of a Deployment and a Service:

apiVersion: apps/v1 kind: Deployment metadata: name: my-dotnet-deployment spec: replicas: 3 selector: matchLabels: app: my-dotnet-app template: metadata: labels: app: my-dotnet-app spec: containers: - name: my-dotnet-container image: your-dockerhub-username/my-dotnet-app:latest # Replace with your image ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-dotnet-service spec: selector: app: my-dotnet-app ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer # Or ClusterIP for internal access

Apply these to your cluster using kubectl apply -f your-deployment.yaml.

Resources

Dive deeper into the official documentation and community resources:

Join the Discussion