.NET Core Multi-Stage Build Örneği
Bu örnekte, basit bir .NET Core web uygulaması oluşturacağız ve bunu multi-stage build kullanarak Docker imajı haline getireceğiz. Bu süreç, uygulamanın derlenmesi ve çalıştırılması için farklı aşamalar kullanarak nihai imajın boyutunu küçültmeyi hedefler.
Adım 1: .NET Core Uygulaması Oluşturma
Öncelikle, basit bir .NET Core web uygulaması oluşturun. Aşağıdaki komutları kullanarak yeni bir proje başlatabilirsiniz:
dotnet new webapi -n MyWebApp
cd MyWebApp
komutları ile yeni bir proje oluşturuyoruz
# İlk aşama: Derleme
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o /app
# İkinci aşama: Çalıştırma
FROM mcr.microsoft.com/dotnet/aspnet:7.0
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]
Dockerfile Açıklaması
İlk Aşama (Derleme):
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build: .NET SDK imajını kullanarak bir derleme aşaması başlatır. Bu imaj, uygulamanın derlenmesi için gerekli tüm araçları içerir.
WORKDIR /src: Çalışma dizinini /src olarak ayarlar.
COPY . .: Proje dosyalarını konteyner içine kopyalar.
RUN dotnet restore: Projenin bağımlılıklarını indirir.
RUN dotnet publish -c Release -o /app: Uygulamayı yayınlar ve derlenmiş dosyaları /app dizinine yerleştirir.
İkinci Aşama (Çalıştırma):
FROM mcr.microsoft.com/dotnet/aspnet:7.0: Daha hafif bir .NET Runtime imajı kullanarak çalıştırma aşaması başlatır. Bu imaj, sadece uygulamanın çalışması için gerekli olan bileşenleri içerir.
WORKDIR /app: Çalışma dizinini /app olarak ayarlar.
COPY --from=build /app .: İlk aşamada derlenen dosyaları bu aşamaya kopyalar.
ENTRYPOINT ["dotnet", "MyWebApp.dll"]: Uygulamayı başlatır.
Adım 3: Docker İmajını Oluşturma ve Çalıştırma
Docker imajını oluşturmak ve çalıştırmak için aşağıdaki komutları kullanın:
docker build -t mywebapp .
docker run -d -p 8080:80 --name mywebapp_container mywebapp
docker build -t mywebapp .: Docker imajını oluşturur ve mywebapp adını verir.
docker run -d -p 8080:80 --name mywebapp_container mywebapp: İmajı çalıştırır ve konteyneri mywebapp_container adıyla başlatır. Uygulama, yerel makinenizdeki 8080 portundan erişilebilir hale gelir.
Sonuç
Bu örnek, .NET Core uygulamanızı multi-stage build kullanarak nasıl daha verimli bir şekilde Docker imajı haline getirebileceğinizi gösterdi. Multi-stage build, gereksiz dosyaları ve bağımlılıkları nihai imajdan çıkararak daha küçük ve güvenli imajlar oluşturmanıza olanak tanır. Bu yöntem, özellikle büyük projelerde dağıtım sürecini optimize etmek için oldukça faydalıdır.