Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
23m 51s
.NET Core uygulamasını bir Docker konteynerine dağıtmak, modern geliştiriciler için önemli bir beceridir. Konteynerler değiştirilemez altyapı, kolay dağıtım ve hafif çalışma zamanı ortamları sunar. Bu kapsamlı kılavuzda, bir örnek API'yi bir Docker konteynerine dağıtmak ve ardından Tim Corey'nin kapsamlı video eğitiminde gösterildiği adımları takip ederek Docker Hub'a itmek için işlemi adım adım keşfedeceğiz: "Bir Konteyner ve Docker Hub'a Dağıtım – C#'ta Örnek Bir API Oluşturma."
Belirli zaman damgalarını referans alarak, takip etmeyi kolaylaştırmak için süreci adım adım inceleyelim. Bu rehber, .NET uygulaması dağıtımı için Docker kullanımıyla ilgili temel imaj, çalışma zamanı imajı ve konteyner imajı gibi komutların kullanımını içerir.
Videonun başlangıcında, Tim, web geliştirmeyi öğrenirken bir örnek uygulamanın kullanışlılığını vurgular. Uygulama, /courses ve /health gibi uç noktalar içerir, bozulmuş sağlık kontrolleri gibi gerçek dünya sorunlarını simüle eder ve hem yerel makinenizde hem de uzak bir sunucuda çalışacak şekilde tasarlanmıştır.
Bu bir .NET Core uygulamasıdır (daha doğrusu bir ASP.NET Core minimal API) ve Docker konteynerleri aracılığıyla kolayca çalıştırılabilir ve test edilebilir.
Tim, Docker'ın yerel makinede yüklü olduğunu Docker Desktop kullanarak kontrol eder. Lokalde Docker kurulu olmadan doğrudan Docker Hub'a yayınlamanın mümkün olduğunu not eder, ancak gösterim için yerel dağıtımla başlamayı tercih eder.
İki önceden yüklenmiş Docker imajı gösterir:
Altyazılar için kişisel bir araç
Microsoft'a ait resmi ASP.NET Core temel imajı: mcr.microsoft.com/dotnet/aspnet
Bu temel imaj yaklaşık 328 MB boyutundadır ve konteyner imajımız için temeli oluşturur. Microsoft, bu imajları MCR (Microsoft Container Registry) üzerinde barındırır ve hem Linux konteynerlerini hem de Windows konteynerlerini destekler. Bu proje için, Linux hedef işletim sistemidir.
Tim API proje klasörüne gider ve komut satırında şu komutu çalıştırır:
dotnet publish -p:PublishProfile=DefaultContainerdotnet publish -p:PublishProfile=DefaultContainerBu komut, Dockerfile'a ihtiyaç duymayan .NET 8 ve .NET 9 içindeki yerleşik konteyner desteğini kullanır. Yayınlama süreci uygun bir çalışma zamanı imajı seçer ve kendi kendine yeten bir konteyner imajı oluşturur.
İçerde şöyle işler:
Proje dosyası (.csproj) API'yi oluşturmak için kullanılır
Bağımlılıklar .NET restore komutu kullanılarak geri yüklenir
Çıktı bir yayın klasörüne gider
Bir DLL dosyası üretilir ve konteyner içine gömülür
Ortaya çıkan imaj yaklaşık 333 MB boyutundadır (temelinden yalnızca 5 MB daha büyük).
İmaj oluşturulduktan sonra, Tim konteyneri çalıştırmak için Docker Desktop'u kullanır. İçerde, uygulama 8080 portunda dinler. Tim, port yapılandırmasına 0 girerek rastgele bir ana bilgisayar portuna harita eder.
Konteyner, rastgele bir adla başlatılır (örneğin, elegant_hoover) ve tarayıcı, varsayılan cevap olarak "Hello World" mesajını gösteren çalışan bir API görüntülemek için açılır.
/courses ve /health'e göz gezdirerek Tim, API'nin çalışır durumda olduğunu doğrular. Sağlık kontrol uç noktası, üretim ortamı senaryosu simüle etmek için faydalıdır.
Çalışan konteynerları görmek için CLI'daki docker ps komutunu kullanabilirsiniz. Tim, temizleme işlemine örnek olarak konteyner ve imajı sonradan siler.
Sonra, Tim bulut dağıtım bölümüne taşınır. Docker Hub hesabında oturum açar ve thesampleapi adında bir ortak depo oluşturur.
Bu, Docker imajının diğerlerinin şunu kullanarak çekebilmesi için itileceği yerdir:
docker pull timcorey/thesampleapi:latest' There is no direct equivalent of a Docker CLI command in VB.NET code.
' This command is run directly in the terminal or command prompt.API'nin proje dosyası içinde, Tim Docker imajının nerede ve nasıl yayınlanacağını tanımlamak için meta veri ekler. Aşağıdaki kod bloğunu ekler:
<ContainerRegistry>docker.io</ContainerRegistry>
<ContainerRepository>timcorey/thesampleapi</ContainerRepository>
<ContainerImageTags>1.0.0;latest</ContainerImageTags><ContainerRegistry>docker.io</ContainerRegistry>
<ContainerRepository>timcorey/thesampleapi</ContainerRepository>
<ContainerImageTags>1.0.0;latest</ContainerImageTags>ContainerRegistry: Hedef kayıt olarak Docker Hub'ı belirtir.
ContainerRepository: Docker Hub deposu yoludur.
ContainerImageTags: Sürümleme ve son sürüm için görüntüyü etiketler.
Bu, gelecekte çok aşamalı bir yapıyı desteklemek üzere görüntüyü hazırlar, ancak Tim şimdilik işleri basit tutuyor.
Tim yine aynı yayınlama komutunu çalıştırır:
dotnet publish -p:PublishProfile=DefaultContainerdotnet publish -p:PublishProfile=DefaultContainer.csproj dosyasını kaydetmediği için gönderme başarısız olur
Docker Hub'da, hem latest hem de 1.0.0 etiketleri thesampleapi deposunda görünür. Bu etiketler, belirli sürümleri çekerken esneklik sağlar.
Tim, Docker yüklü herhangi bir makineden görüntüyü nasıl çekeceğini gösterir:
docker pull timcorey/thesampleapi:latest' There is no direct equivalent of a Docker CLI command in VB.NET code.
' This command is run directly in the terminal or command prompt.Docker katman önbelleğe alma sayesinde, görüntü hızlı bir şekilde indirilir çünkü çoğu zaten temel görüntüden gelir.
Görüntüyü çalıştırmak için:
docker run -p 0:8080 timcorey/thesampleapi:latestdocker run -p 0:8080 timcorey/thesampleapi:latestBu, rastgele bir ana bilgisayar portunu dahili port 8080'e eşler.
Sürümleme göstermek için, Tim .csproj dosyasını düzenler:
<ContainerImageTags>1.0.1;latest</ContainerImageTags><ContainerImageTags>1.0.1;latest</ContainerImageTags>Sonra yayınlama komutunu yeniden çalıştırır:
dotnet publish -p:PublishProfile=DefaultContainerdotnet publish -p:PublishProfile=DefaultContainerArtık Docker Hub deposu üç etiket gösterir:
1.0.0
1.0.1
latest (şimdi 1.0.1'e işaret ediyor)
Tim, birden fazla etikete rağmen, Docker'ın disk kullanımını optimize etmek için yinelenen katmanları saklamadığını ve ayırt edici katmanlar kullandığını açıklar.
Tim, görüntü Docker Hub'da bir kez yer aldığında, istediğiniz zaman herhangi bir makinede çalıştırabileceğinizi vurgular:
docker pull timcorey/thesampleapi:latest' There is no direct equivalent of a Docker CLI command in VB.NET code.
' This command is run directly in the terminal or command prompt.Sonra docker run komutunu kullanarak görüntüyü başlatın. İşiniz bittiğinde, şu komutla temizleyin:
docker ps # Get container ID
docker stop <id> # Stop the container
docker rm <id> # Remove the container
docker rmi <image> # Remove the imagedocker ps ' Get container ID
docker stop <id> ' Stop the container
docker rm <id> ' Remove the container
docker rmi <image> ' Remove the imageBu, yerel makinenizi şişirmeden talep üzerine geliştirme ve test yapmanızı mükemmel hale getirir.
Tim, bir sonraki adımda bunu bir Sanal Özel Sunucu (VPS) üzerinde dağıtmayı planladığını belirterek konuyu kapatır. Bir alan adı atamak ve konteyneri herkese açık hale getirmek için adımları gösterecek.
Tim Corey'nin videosu rehberi kullanarak:
.NET new console ile bir .NET Core API oluşturuldu
.NET restore ve .NET publish kullanılarak oluşturuldu ve dağıtıldı
Örnek bir Dockerfile olmadan bir Docker konteyneri oluşturduk
Docker Hub'a konteyner görüntüsü yükledik
docker run kullanarak konteyneri çektik ve çalıştırdık
Etiketler ve ayırt edici görüntü katmanlarını yönettik
Sürümlemeli görüntüler kullanarak üretim ortamlarına hazırlık yaptık
Docker ve .NET etrafında merkezlenen bu iş akışı, ölçeklenebilir, test edilebilir ve paylaşılabilir uygulamalar oluşturmak için mükemmeldir.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy