.NET CLI ile C# Uygulamasını Kolayca Konteynerleştirme
[[academy-video-youtube({"vid": "bg0QVTS4Q0c", "start_time": "0", "title": "Uygulamanızı C# ile Kolayca Konteynerize Edin .NET CLI", "creator": "Tim Corey", "length": "9m 57s"})]]
Containerlar güçlü bir araçtır, ancak birçok geliştirici için bir C# uygulamasını bir container içerisine koyma fikri bunaltıcı gelebilir. Bir Dockerfile oluşturmak 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ştirir ve geliştiricilerin uygulamalarını bir Dockerfile'e ihtiyaç duymadan konteynerleştirmesine olanak tanır.
Bu makalede, bir C# uygulamasını Tim'in ".NET CLI ile C# Uygulamanızı Kolayca Konteynerleştirin" videosundaki adım adım yaklaşımı kullanarak nasıl konteynerleştirebileceğimize daha yakından bakacağız. Tim'in rehberliğini takip ederek, bir .NET uygulamasının Docker konteynerine zahmetsizce nasıl yayımlanacağını anlayacağız.
Konteynerler için .NET CLI'ye Giriş
Videonun başında Tim, konteynerleştirmenin gerekliliğini açıklar. Kapsayıcılar harika bir araç olmakla birlikte, bir Dockerfile oluşturma ve doğru şekilde yapılandırma sürecinin karmaşık olabileceğini vurgulamaktadır.
Tim, elle bir Dockerfile oluşturmaktansa, .NET CLI kullanarak daha kolay bir yaklaşım sunar. Bu yöntem, geliştiricilerin Dockerfile'i elle yazmadan bir konteyner uygulaması oluşturmalarına olanak 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 açıklıyor.
Uygulama Kurulumu
Tim, örnek olarak minimal bir Web API uygulaması kullanarak başlar. Uygulama, bazı verileri döndüren /messages adlı tek bir uç noktayı içerir.
Uygulamanın containerleşme öncesi davranışını göstermek için, Tim onu yerel olarak çalıştırır. /messages uç noktasına erişerek, konteyner dışında doğru çalıştığını onaylıyor.
Konteynerleştirmeye başlamadan önce şunları da kontrol eder:
Docker, bilgisayarına kurulu ve çalışıyor.
- Başlangıçta mevcut Docker görüntüleri veya konteynerleri yoktur.
Bu, yeni bir konteyner oluşturulduğunda değişiklikleri net bir şekilde görebilmemizi sağlar.
Konteynerleştirmeye Hazırlık
Uygulamayı konteynerleştirmek için Tim, proje dizininde komut satırına geçer. Daha 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ü ayrıntılı olarak açıklar:
-o:Linux→ Uygulamayı Linux tabanlı bir konteyner için 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 konteynerlerinin genellikle .NET Framework uygulamaları için bir köprü görevi gördüğü için Linux konteynerlerinin tercih edildiğini vurgular.
Yayımlama ve Bir Konteyner Oluşturma
Yayınlama komutu yürütüldüğünde, Tim, .NET CLI'nin gerekli yapılandırmaları otomatik olarak belirleyeceğini ve her şeyi bir konteynere paketleyeceğini açıklar. Şu noktaları belirtir:
- Bu yöntemde bir Dockerfile gerekliliği yoktur.
- Süreç uygulamayı oluşturur ve tek bir adımda konteynerleştirir.
- Kullanılan temel görüntü Microsoft'un .NET 8 çalışma zamanı konteyneridir.
Yayınladıktan sonra, Docker Desktop'u kontrol eder ve yeni konteyner imajı background-demo'nin oluşturulduğunu onaylar. İlk konteyner boyutu 221 MB'dir.
Tim, izleyicilere bu boyutun daha sonra küçültülebileceğini açıklar.
Konteyneri Çalıştırma
Konteynerleştirilmiş uygulamayı test etmek için Tim, Docker Desktop'tan doğrudan konteyneri başlatır. Henüz çalışan konteyner olmadığından, 'Çalıştır' butonuna tıklar ve isteğe bağlı bir ayar yapar:
- Konteynerin iç bağlantı noktasını (rastgele atanmış) ana makinede 8080 bağlantı noktasına eşler.
Başlattıktan sonra, bir web tarayıcısı kullanarak uygulamaya erişir. Başlangıçta, kök URL'ye erişmek 404 hatası verir ancak /messages'ya gitmek beklenen verileri başarıyla görüntüler.
Tim, önemli bir noktayı vurgular:
- Uygulama, konteyner içinde UTC saat diliminde çalışır, bu da yerel makinenin saat dilimiyle farklılık gösterebilir.
Ayrıca, uygulamanın yayımlama modunda yayımlandığını ve Swagger UI'nin varsayılan olarak devre dışı olduğunu belirtir.
Konteyner Boyutunu Optimize Etme
Bu noktada, varsayılan konteyner boyutu 221 MB'dir ve Tim bunu oldukça büyük olarak kabul eder. Boyutu küçültmek için, daha hafif bir temel görüntü tanıtır.
Program.cs dosyasını değiştirerek konteyner ailesinin, daha küçük Ubuntu tabanlı bir imaj olan jammy-chiseled olarak ayarlanmasını sağlar:
builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");builder.Services.Configure<ContainerOptions>(options => options.ContainerFamily = "jammy-chiseled");Daha sonra yayımlama komutunu tekrar çalıştırır ve konteyneri yeniden oluşturduktan sonra görüntü boyutunu tekrar kontrol eder.
Yeni görüntü boyutu 113 MB'dir—yaklaşık 100 MB'lık bir azalma! Daha küçük boyuta rağmen, uygulama aynı şekilde çalışır.
Konteynerleri Silme ve Yeniden Oluşturma
Tim, çalışma alanını temizlemek için konteyneri silmeyi gösterir. Ancak Docker görüntüsü hala mevcuttur bu nedenle gerekirse konteyner yeniden oluşturulabilir.
Konteynerin bir kez oluşturulduktan sonra şunlar için kullanılabileceğini vurgular:
- Geliştirme ve test için yerel olarak çalıştırılabilir.
- Docker Hub veya Azure Container Registry gibi bir konteyner kaydına itilip yüklenebilir.
- Bulut tabanlı bir web uygulamasının temeli olarak kullanılabilir.
Sonuç ve Son Düşünceler
Tim, .NET CLI'yi kullanmanın konteynerleştirmenin temel avantajlarını pekiştirecek şekilde videoyu toparlar:
- Dockerfile gerekmez – .NET CLI her şeyi otomatik olarak halleder.
- Hızlı ve kolay bir süreç – Tek bir komutla uygulama konteynerleştirilebilir.
- Daha küçük, optimize edilmiş görseller –
jammy-chiseledkullanarak konteyner boyutunu azaltır. - Sorunsuz dağıtım – Konteyner, çeşitli bulut hizmetlerine itilip yüklenebilir.
Son Düşünceler
Tim'in .NET CLI ile C# uygulamalarını konteynerleştirme yaklaşımı basit, hızlı ve etkilidir. Onun yöntemini izleyerek, geliştiriciler geniş çapta Docker bilgisine ihtiyaç duymadan konteynerler oluşturabilir ve optimize edebilir.
Linux konteynerlerinin, optimize edilmiş temel görüntülerin ve baştan sona yayımlama komutlarının kullanılması, geliştiricilerin minimum çaba ile uygulamalarını verimli bir şekilde konteynerleştirmelerine olanak tanır.
Daha derinlemesine bilgi almak istiyorsanız, Tim Corey'nin videosunu mutlaka kontrol edin. Tüm sürecin net, adım adım bir açıklamasını sunar.

