.NET Backend (Production Ready) 🔷
Bu şablon, .NET projelerinizi (API veya MVC) prodüksiyon ortamına hazırlamak için optimize edilmiş Dockerfile örnekleri sunar.
Özellikle Katmanlı Mimari (N-Layer / Clean Architecture) kullanan projelerde bağımlılıkların doğru yönetilmesi ve Docker Cache mekanizmasının bozulmaması kritiktir.
🏗️ 1. Basit / Monolith Proje
Eğer projeniz tek bir .csproj dosyasından oluşuyorsa (klasik WebAPI), bu standart dosyayı kullanın.
# --- Build Stage ---
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
# Önce sadece proje dosyasını kopyala ve restore et (Cache'i kullanmak için)
COPY ["MyApp.csproj", "./"]
RUN dotnet restore "MyApp.csproj"
# Şimdi kalan tüm kaynak kodlarını kopyala
COPY . .
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish /p:UseAppHost=false
# --- Final Stage (Chiseled Ubuntu) ---
# Shell içermeyen, hacklenmesi zor güvenli imaj
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy-chiseled AS final
WORKDIR /app
COPY --from=build /app/publish .
# Port Ayarı (Chiseled imajlar 8080 kullanır)
ENV ASPNETCORE_HTTP_PORTS=8080
EXPOSE 8080
ENTRYPOINT ["dotnet", "MyApp.dll"]
🏰 2. Katmanlı Mimari (Clean Architecture)
Clean Architecture projelerinde Core, Infrastructure, Application gibi birden fazla kütüphane projesi olur. COPY . . yapıp restore ederseniz, kodda tek bir harf değişse bile Docker tüm restore işlemini (paket indirmeyi) baştan yapar. Bu da build süresini 3-4 dakikaya çıkarır.
Aşağıdaki yöntem ile build süresini saniyelere düşürebilirsiniz.
Senaryo:
src/MyProject.Api(Başlangıç Projesi)src/MyProject.Coresrc/MyProject.Infrastructure
# --- Build Stage ---
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
# ADIM 1: Sadece .csproj dosyalarını (klasör yapısını koruyarak) kopyala
# Bu sayede kod değişse bile bu katman cache'den gelir.
COPY ["src/MyProject.Api/MyProject.Api.csproj", "src/MyProject.Api/"]
COPY ["src/MyProject.Core/MyProject.Core.csproj", "src/MyProject.Core/"]
COPY ["src/MyProject.Infrastructure/MyProject.Infrastructure.csproj", "src/MyProject.Infrastructure/"]
# ADIM 2: Restore işlemini başlat (Sadece csproj'lar varken)
RUN dotnet restore "src/MyProject.Api/MyProject.Api.csproj"
# ADIM 3: Artık kodları kopyala
COPY . .
# ADIM 4: Build ve Publish
WORKDIR "/src/src/MyProject.Api"
RUN dotnet publish "MyProject.Api.csproj" -c Release -o /app/publish /p:UseAppHost=false
# --- Final Stage ---
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy-chiseled AS final
WORKDIR /app
COPY --from=build /app/publish .
ENV ASPNETCORE_HTTP_PORTS=8080
EXPOSE 8080
ENTRYPOINT ["dotnet", "MyProject.Api.dll"]
🖼️ 3. MVC vs API Farkı
MVC projesi deploy ediyorsanız süreç API ile %95 aynıdır. Tek fark, eğer Frontend Assets (CSS/JS) için Node.js kullanıyorsanız (örneğin Webpack, TailwindCSS derlemesi gerekiyorsa) Dockerfile içine bir Node katmanı eklenmelidir.
MVC için Node.js Eklenmiş Build Stage:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
# Node.js Kurulumu (Build aşamasında gerekli)
RUN apt-get update && \
apt-get install -y curl && \
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs
WORKDIR /src
# ... (CSProj Restore Adımları Aynı) ...
COPY . .
# Publish öncesi Frontend Build (Örnek)
WORKDIR "/src/src/MyProject.Web"
RUN npm install
RUN npm run build # CSS/JS dosyalarını wwwroot altına atar
# Sonra .NET Publish (wwwroot dahil edilir)
RUN dotnet publish "MyProject.Web.csproj" -c Release -o /app/publish
[!TIP] Eğer Frontend build işlemini (npm run build) local'de yapıp
wwwrootklasörünü commit atıyorsanız, yukarıdaki Node.js adımına gerek yoktur. Standart .NET Dockerfile yeterlidir.