IRONSOFTWAREHOME

Bir Kapsayıcıya ve Docker Hub'a Dağıtmak - C# Kursunda Örnek API İnşası

Bir Konteyner ve Docker Hub'a Dağıtım - C# Kursunda Bir Örnek API Oluşturma

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.

Örnek API'yi Yaratma ve Anlama

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.

Docker'ı Yerel Olarak Kurma

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.

Konteynere Yerel Olarak Yayınlama

Tim API proje klasörüne gider ve komut satırında şu komutu çalıştırır:

dotnet publish -p:PublishProfile=DefaultContainer

Bu 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).

Docker ile İmajı Çalıştırma

İ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.

Docker Hub Deposu Oluşturma

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

Docker Hub için Proje Yapılandırması

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: 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.

Docker Hub'a Yayınlama

Tim yine aynı yayınlama komutunu çalıştırır:

dotnet 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.

Docker Hub'dan Görüntü Çekme

Tim, Docker yüklü herhangi bir makineden görüntüyü nasıl çekeceğini gösterir:

docker pull timcorey/thesampleapi:latest

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:latest

Bu, rastgele bir ana bilgisayar portunu dahili port 8080'e eşler.

Görüntünün Yeni Bir Sürümünü Oluşturma

Sürümleme göstermek için, Tim .csproj dosyasını düzenler:

<ContainerImageTags>1.0.1;latest</ContainerImageTags>

Sonra yayınlama komutunu yeniden çalıştırır:

dotnet publish -p:PublishProfile=DefaultContainer

Artı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.

Yerel Geliştirme İçin Docker Görüntüsünü Kullanma

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

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 image

Bu, yerel makinenizi şişirmeden talep üzerine geliştirme ve test yapmanızı mükemmel hale getirir.

Sırada Ne Var?

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.

Sonuç: Yerel Yapıdan Bulut Dağıtımına

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.

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!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez