.NET ve Docker’a Giriş

Kapsayıcılar, Docker, Kubernetes ve Podman gibi araçlarla bulut uygulamalarını dağıtmanın ve barındırmanın en popüler yollarından biridir. Birçok geliştirici kapsayıcıları seçer çünkü bir uygulamayı bağımlılıklarıyla paketlemek ve bu uygulamanın herhangi bir kapsayıcı konağından güvenilir bir şekilde çalıştırılmasını sağlamak kolaydır. Kapsayıcılarla .NET kullanımına yönelik kapsamlı destek vardır.

Docker, kapsayıcılara harika bir genel bakış sağlar. Docker Desktop: Community Edition , geliştirici masaüstü makinesinde kapsayıcıları kullanmak için iyi bir araçtır.

.NET görüntüleri

Resmi .NET kapsayıcı görüntüleri Microsoft Yapıt Kayıt Defteri yayımlanır ve Docker Hub'da bulunabilir. Linux (Alpine, Debian, Ubuntu, Mariner) ve Windows için kodunuzu oluşturmaya yönelik üretim ve SDK görüntüleri için çalışma zamanı görüntüleri vardır. Daha fazla bilgi için bkz . .NET kapsayıcı görüntüleri.

.NET görüntüleri, yeni bir .NET düzeltme eki yayımlandığında veya bir işletim sistemi temel görüntüsü güncelleştirildiğinde düzenli olarak güncelleştirilir.

Keskili kapsayıcı görüntüleri , .NET çalışma zamanı için gereken en az bileşen kümesine sahip Ubuntu kapsayıcı görüntüleridir. Bu görüntüler normal Ubuntu görüntülerinden yaklaşık 100 MB daha küçüktür ve daha az bileşene sahip olduklarından daha az CVE'ye sahiptir. Özellikle, güvenlik profillerini önemli ölçüde geliştiren bir kabuk veya paket yöneticisi içermezler. Bunlar ayrıca kök olmayan bir kullanıcı içerir ve bu kullanıcı etkin olarak yapılandırılır.

Kapsayıcı görüntüleri oluşturma

Dockerfile ile kapsayıcı görüntüsü oluşturabilir veya görüntü oluşturmak için .NET SDK'sını kullanabilirsiniz. Görüntü oluşturma örnekleri için bkz . dotnet/dotnet-docker ve dotnet/sdk-container-builds.

Aşağıdaki örnek, birkaç hızlı adımda (.NET 8 ve .NET 7.0.300 ile desteklenir) kapsayıcı görüntüsü oluşturmayı ve çalıştırmayı gösterir.

$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
  Determining projects to restore...
  All projects are up-to-date for restore.
  webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
  webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
  Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
  Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
    <p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID   IMAGE     COMMAND               CREATED              STATUS              PORTS                                       NAMES
7c7ad33409e5   webapp    "dotnet webapp.dll"   About a minute ago   Up About a minute   0.0.0.0:8000->8080/tcp, :::8000->8080/tcp   jovial_shtern
$ docker kill 7c7ad33409e5

docker init Dockerfiles kullanmak isteyen geliştiriciler için yeni bir seçenektir.

Bağlantı Noktaları

Bağlantı noktası eşlemesi , kapsayıcıları kullanmanın önemli bir parçasıdır. Dış web isteklerine yanıt vermek için bağlantı noktalarının kapsayıcı dışında yayımlanması gerekir. ASP.NET Core kapsayıcı görüntüleri varsayılan olarak bağlantı noktasında 8080dinlemek için .NET 8'de değiştirildi. .NET 6 ve 7, bağlantı noktasında 80dinler.

ile docker runönceki örnekte konak bağlantı noktası kapsayıcı bağlantı noktasına 80008080eşlenir. Kubernetes de benzer şekilde çalışır.

Bu ASPNETCORE_HTTP_PORTSdavranışı yapılandırmak için , ASPNETCORE_HTTPS_PORTSve ASPNETCORE_URLS ortam değişkenleri kullanılabilir.

Kullanıcılar

.NET 8'den başlayarak, tüm görüntüler adlı appkök olmayan bir kullanıcı içerir. Varsayılan olarak, keskili görüntüler bu kullanıcı etkinken yapılandırılır. Uygulamayı .NET kapsayıcısı olarak yayımlama özelliği (Kapsayıcı görüntüleri oluşturma bölümünde gösterilmiştir) ayrıca bu kullanıcı varsayılan olarak etkinken görüntüleri yapılandırır. Diğer tüm senaryolarda kullanıcıapp, örneğin Dockerfile yönergesi USERile el ile ayarlanabilir. ile bir görüntü yapılandırıldıysa app ve komutların olarak rootUSER çalıştırılması gerekiyorsa, yönerge kullanıcıya rootolarak ayarlamak için kullanılabilir.

Bilgi sahibi olun

Kapsayıcıyla ilgili haberler dotnet/dotnet-docker tartışmalarına ve .NET Blog "kapsayıcılar" kategorisine gönderilir.

Azure hizmetleri

Çeşitli Azure hizmetleri kapsayıcıları destekler. Uygulamanız için bir Docker görüntüsü oluşturur ve bunu aşağıdaki hizmetlerden birine dağıtırsınız:

  • Azure Kubernetes Service (AKS)
    Kubernetes kullanarak Windows ve Linux kapsayıcılarını ölçeklendirme ve düzenleme.

  • Azure App Service
    PaaS ortamında kapsayıcıları kullanarak web uygulamaları veya API'ler dağıtın.

  • Azure Container Apps
    Sunucuları, düzenlemeyi veya altyapıyı yönetmeden kapsayıcı iş yüklerinizi çalıştırın ve gözlemlenebilirlik ve sıfıra ölçeklendirme için Dapr ve KEDA için yerel desteklerden yararlanın.

  • Azure Container Instances
    Daha üst düzey yönetim hizmetleri olmadan bulutta tek tek kapsayıcılar oluşturun.

  • Azure Batch
    Kapsayıcıları kullanarak yinelenen işlem işlerini çalıştırın.

  • Azure Service Fabric
    Windows ve Linux kapsayıcılarını kullanarak .NET uygulamalarını mikro hizmetlere kaldırın, shift ve modernleştirin.

  • Azure Container Registry
    Tüm Azure dağıtımı türlerinde kapsayıcı görüntüleri depolayın ve yönetin.

Sonraki adımlar