.NET CLI ile C# Uygulamasını Kolayca Konteynerleştirme
Kapsayıcılar güçlü bir araçtır, ancak birçok geliştirici için bir C# uygulamasını bir kapsayıcıya koyma fikri bunaltıcı gelebilir. Bir Dockerfile kurmak ve bağımlılıkları elle yönetmek karmaşık olabilir. Ancak, Tim Corey'nin videosunda açıkladığı gibi, .NET CLI bu süreci basitleştirerek geliştiricilerin bir Dockerfile gerekmeden uygulamalarını kapsayıcı hale getirmelerini sağlar.
Bu makalede, Tim'in videosundaki "Containerize Your C# Application Easily with the .NET CLI" başlığındaki adım adım yaklaşımını kullanarak bir C# uygulamasını kapsayıcı hale getirmeyi derinlemesine inceleyeceğiz. Tim'in rehberliğini takip ederek bir .NET uygulamasını bir Docker kapsayıcısına yayınlamanın nasıl zahmetsizce yapıldığını anlayacağız.
Konteynerler için .NET CLI'ye Giriş
Videonun başında Tim, konteynerleştirmenin gerekliliğini açıklar. Kapsayıcıların harika bir araç olduğunu vurgular, ancak bir Dockerfile kurma ve doğru şekilde yapılandırma sürecinin karmaşık olabileceğini belirtir.
Bir Dockerfile oluşturmaktan ziyade, Tim .NET CLI kullanarak daha kolay bir yaklaşım sunar. Bu yöntem, geliştiricilere bir Dockerfile yazmadan kapsayıcı bir uygulama oluşturma olanağı tanır.
Tim ayrıca bu videonun, teknik konulara hızlı ve etkili girişlere odaklanan 10 dakikalık eğitim serisinin bir parçası olduğunu belirtir.
Uygulama Kurulumu
Tim, bir minimal Web API uygulaması örneğiyle başlar. Uygulama, /messages adında tek bir uç nokta içerir ve bazı veriler döndürür.
Konteynerleştirilmeden önce uygulamanın davranışını göstermek için Tim, uygulamayı yerel olarak çalıştırır. /messages uç noktasına erişerek, bir konteyner dışında doğru çalıştığını doğrular.
Konteynerleştirme işlemine devam etmeden önce, ayrıca şunları kontrol eder:
- Docker'ın bilgisayarına yüklü ve çalışır durumda olduğunu.
- Başlangıçta mevcut bir Docker imgesi veya kap yok.
Bu, yeni bir kapsayıcı oluşturulduğunda değişiklikleri net bir şekilde görebileceğimizi garanti eder.
Konteynerleştirme İçin Hazırlık
Uygulamayı kapsayıcıya almak için Tim, proje dizininin içinde komut satırına geçer. Sonra şu komutu çalıştırır:
dotnet publish -o:Linux -a:x64 -p:PublishProfile=DefaultContainer -c:Release
Tim komutun her bölümünü açıklar:
-o:Linux→ Linux tabanlı bir konteyner için uygulamayı yayınlar.-a:x64→ Mimarinin 64-bit olduğunu belirtir.-p:PublishProfile=DefaultContainer→ Varsayılan konteyner ayarlarını kullanır.-c:Release→ Daha iyi performans için uygulamayı yayın modunda yayınlar.
Tim, Windows kapsayıcılarının esas olarak .NET Framework uygulamaları için bir köprü görevi gördüğünden, Linux kapsayıcılarının tercih edildiğini vurgular.
Yayınlama ve Kapsayıcı Oluşturma
Yayın komutu çalıştırıldıktan sonra, Tim .NET CLI'nin gerekli yapılandırmaları otomatik olarak belirleyeceğini ve her şeyi bir kapsayıcıya paketleyeceğini açıklar. Şunları belirtir:
- Bu yöntemde bir Dockerfile'a gerek yok.
- Süreç, bir adımda uygulamayı derler ve kapsayıcı haline getirir.
- Kullanılan baz imaj, Microsoft'un .NET 8 çalışma zamanı kapsayıcısıdır.
Yayınladıktan sonra, Docker Desktop'u kontrol eder ve yeni konteyner görüntüsünün, background-demo, oluşturulduğunu doğrular. İlk kapsayıcı boyutu 221 MB'tır.
Tim izleyicilere bu boyutun daha sonra azaltılabileceğini belirtir.
Kapsayıcıyı Çalıştırma
Kapsayıcı hale getirilmiş uygulamayı test etmek için Tim, kapsayıcıyı doğrudan Docker Desktop'tan başlatır. Henüz çalışan bir kapsayıcı olmadığından "Çalıştır"'a tıklar ve isteğe bağlı bir ayar yapar:
- Kapsayıcının içsel portunu (rastgele atanmış) ana bilgisayardaki 8080 portuna eşler.
Başlattıktan sonra, uygulamaya bir web tarayıcısı kullanarak erişir. Başlangıçta, kök URL'ye erişmek bir 404 hatası verir, ancak /messages'e gitmek beklenen verileri başarıyla görüntüler.
Tim önemli bir noktayı vurgular:
- Uygulama kapsayıcı içinde UTC zamanında çalışır, bu da yerel makinenin zaman diliminden farklı olabilir.
Ayrıca, uygulama yayın modunda yayınlandığından Swagger UI'nin varsayılan olarak devre dışı olduğunu not eder.
Kapsayıcı Boyutunu Optimize Etme
Bu noktada, varsayılan kapsayıcı boyutu 221 MB'tır ve Tim bunu oldukça büyük olarak kabul eder. Boyutu küçültmek için daha hafif bir baz imaj tanıtır.
Program.cs dosyasını değiştirerek, konteyner ailesini daha küçük Ubuntu tabanlı bir görüntü olan jammy-chiseled olarak ayarlar:
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");Sonra yayın komutunu yeniden çalıştırır ve kapsayıcıyı yeniden oluşturduktan sonra imaj boyutunu tekrar kontrol eder.
Yeni imaj boyutu 113 MB'tır – yaklaşık 100 MB'lık bir azalma! Daha küçük boyuta rağmen uygulama aynı şekilde çalışır.
Kapsayıcıları Silme ve Yeniden Oluşturma
Tim çalışma alanını temizlemek için kapsayıcıyı silmeyi gösterir. Ancak, Docker imajı kullanılabilir durumda kalır, bu yüzden gerekirse kapsayıcı yeniden oluşturulabilir.
Bir kapsayıcı oluşturulduktan sonra:
- Geliştirme ve test için yerel olarak çalıştırılabilir.
- Docker Hub veya Azure Container Registry gibi bir kapsayıcı kayıt deposuna gönderilebilir.
- Bulutta dağıtılmış bir web uygulaması için baz olarak kullanılabilir.
Sonuç ve Son Düşünceler
Tim, .NET CLI kullanarak konteynerleştirmenin başlıca avantajlarını tekrarlayarak videoyu tamamlar:
- Dockerfile'a gerek yok – .NET CLI her şeyi otomatik olarak yönetir.
- Hızlı ve kolay bir süreç – Sadece bir komutla bir uygulama kapsayıcılaştırılabilir.
- Daha küçük, optimize edilmiş görüntüler –
jammy-chiseledkullanarak konteyner boyutunu azaltır. - Sorunsuz dağıtım – Kapsayıcı, çeşitli bulut hizmetlerine gönderilebilir.
Son Düşünceler
Tim'in .NET CLI ile C# uygulamalarını konteynerleştirme yaklaşımı basit, hızlı ve etkilidir. Onun yöntemini takip ederek, geliştiriciler geniş Docker bilgisi gerektirmeden konteynerleri oluşturup optimize edebilir.
Linux kapsayıcılarından, optimize edilmiş baz imajlardan ve güvenilir yayın komutlarından faydalanarak bu teknik, geliştiricilere uygulamalarını minimum çabayla etkin bir şekilde konteynerleştirme imkanı sağlar.
Daha fazla derinlemesine inceleme yapmak istiyorsanız, mutlaka Tim Corey'nin videosunu izleyin. Tüm sürecin net, adım adım bir incelemesini sunar.

