Aracılığıyla paylaş


.NET ve Docker'a giriş

Kapsayıcılar, Docker, Kubernetesve Podmangibi 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 kullanarak için kapsamlı destek sağlanır.

Docker, kapsayıcılar 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 Artifact Registry üzerinde yayınlanır ve Docker Hubüzerinde bulunabilir. Linux (Alpine, Debian, Ubuntu, Mariner) ve Windows için kodunuzu oluşturmaya üretim ve SDK görüntüleri için çalışma zamanı görüntüsü vardır. Daha fazla bilgi için bkz. .NET kapsayıcı görüntülerini.

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

Yontulmuş 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 kullanıcı içerir ve bu kullanıcı etkinleştirilmiş olarak yapılandırılır.

Konteyner görüntüleri oluşturma

Dockerfile ile kapsayıcı görüntüsü oluşturabilir veyabir görüntü oluşturmak için .NET SDK'sını kullanabilirsiniz. Görüntü oluşturma örnekleri için bkz. dotnet/dotnet-docker vedotnet/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.

Portlar

Bağlantı noktası eşleme, kapsayıcıları kullanmanın önemli bir parçasıdır. Dış web isteklerine yanıt vermek için portların kapsayıcı dışında yayımlanması gerekir. ASP.NET Core kapsayıcı görüntüleri varsayılan olarak .NET 88080bağlantı noktasında dinlemek üzere değiştirilmiştir. .NET 6 ve 7, port 80üzerinde dinler.

Önceki örnekte docker run, konak bağlantı noktası 8000'den kapsayıcı bağlantı noktası 8080'ye eşlenmiştir. Kubernetes de benzer şekilde çalışır.

bu davranışı yapılandırmak için ASPNETCORE_HTTP_PORTS, 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 appadlı kö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 etkinleştirildiğinde görüntüleri yapılandırır. Diğer tüm senaryolarda app kullanıcı, örneğin USERDockerfile yönergesiyle el ile ayarlanabilir. Bir görüntü app ile yapılandırıldıysa ve komutların rootolarak çalıştırılması gerekiyorsa, USER yönergesi 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 & Linux kapsayıcılarını ölçeklendirin 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 & Linux kapsayıcılarını kullanarak .NET uygulamalarını mikro hizmetlere kaldırın, shift ve modernleştirin.

  • Azure Container Registry
    Kapsayıcı görüntülerini her tür Azure dağıtımında depolayın ve yönetin.

Sonraki adımlar