Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
Docker

Step-by-Step: Dockerizing Existing Applications

- 18.08.26 - ErcanOPAK

📦 Dockerizing Existing Applications

Containerizing legacy apps is challenging. Step-by-step guide to containerize existing .NET applications.

📝 Step 1-4: Dockerfile Creation

# Step 1: Analyze Application
- Identify dependencies
- Check .NET Framework version
- List external dependencies
- Check configuration files

# Step 2: Create Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "MyApp.dll"]

# Step 3: Multi-Stage Build
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY *.sln .
COPY *.csproj .
RUN dotnet restore

COPY . .
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]

# Step 4: Environment Variables
ENV ASPNETCORE_ENVIRONMENT=Production
ENV ConnectionStrings__Default=Server=db;Database=MyApp;User=sa;Password=...

# Step 5: .dockerignore
bin/
obj/
*.user
*.suo
.git/
*.log

📝 Step 5-8: Build and Deploy

# Step 5: Build Image
docker build -t myapp:latest .

# Step 6: Test Locally
docker run -d -p 8080:80 --name myapp myapp:latest
docker logs -f myapp

# Step 7: Docker Compose (with Database)
version: '3.8'
services:
    app:
        build: .
        ports:
            - "8080:80"
        environment:
            - ConnectionStrings__Default=Server=db;Database=MyApp;User=sa;Password=...
        depends_on:
            - db
    
    db:
        image: mcr.microsoft.com/mssql/server:2022-latest
        environment:
            - ACCEPT_EULA=Y
            - SA_PASSWORD=Your_password123
        volumes:
            - sql-data:/var/opt/mssql

volumes:
    sql-data:

# Step 8: Deploy to Production
docker tag myapp:latest myregistry.azurecr.io/myapp:latest
docker push myregistry.azurecr.io/myapp:latest

✅ Dockerization Benefits

  • ✓ Consistent environments
  • ✓ Easy deployment
  • ✓ Scalability
  • ✓ Isolation
  • ✓ CI/CD integration

Dockerizing existing applications is the first step toward modernization. It brings consistency and portability to your infrastructure.

— DevOps Consultant

Related posts:

Docker: Container Orchestration with Docker Swarm

Docker: Implement Log Rotation and Retention Policies

Docker: Fix Container Logs That Go Silent Because the App Writes to a File Instead of stdout

Post Views: 3

Post navigation

C#: System.Text.Json vs Newtonsoft.Json Performance
Step-by-Step: Building a Weather App with Fetch API

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (952)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (624)
  • Add Constraint to SQL Table to ensure email contains @ (590)
  • Average of all values in a column that are not zero in SQL (553)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (526)
  • Find numbers with more than two decimal places in SQL (468)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps
  • Photoshop: Fix a Color Profile Mismatch That Makes Printed Output Look Nothing Like What You Saw On Screen
  • WordPress: Fix Search Results That Return Pages From a Theme You Deactivated Months Ago
  • Visual Studio: Fix a Test Project That Builds Fine Alone but Fails to Discover Any Tests After a NuGet Restore
  • ASP.NET Core: Fix a File Upload That Times Out on Slow Connections Only Because Kestrel’s Minimum Data Rate Feature Kicked In
  • JavaScript: Fix an Array Destructuring Default Value That Silently Never Applies Because null Was Passed Instead of Undefined

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (952)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com