Aracılığıyla paylaş


.NET 8 kapsayıcılarındaki yenilikler

Bu makalede.NET 8 kapsayıcılarındaki yeni özellikler açıklanmaktadır.

Konteyner görüntüleri

.NET 8 için .NET kapsayıcı görüntülerde aşağıdaki değişiklikler yapılmıştır:

Kök olmayan kullanıcı

Görüntüler non-root kullanıcıyı içerir. Bu kullanıcı görüntüleri non-root uyumlu hale getirir. non-rootolarak çalıştırmak için Dockerfile dosyanızın sonuna aşağıdaki satırı (veya Kubernetes bildirimlerinizde benzer bir yönergeyi) ekleyin:

USER app

.NET 8, non-root kullanıcı için UID için 1654 olan bir ortam değişkeni ekler. Bu ortam değişkeni, kapsayıcı kullanıcısının ada göre değil UID aracılığıyla ayarlanmasını gerektiren Kubernetes runAsNonRoot testi için kullanışlıdır. Bu dockerfile örnek kullanımı gösterir.

Varsayılan bağlantı noktası, 80'dan 8080'e değiştirildi. Bu değişikliği desteklemek için, bağlantı noktalarını değiştirmeyi kolaylaştırmak için yeni bir ortam değişkeni ASPNETCORE_HTTP_PORTS kullanılabilir. değişkeni, ASPNETCORE_URLSiçin gereken biçimden daha basit olan bağlantı noktalarının listesini kabul eder. Eğer bu değişkenlerden birini kullanarak bağlantı noktasını 80'a geri çevirirseniz, non-rootolarak çalıştıramazsınız.

Daha fazla bilgi için bkz. Varsayılan ASP.NET Core bağlantı noktası 80'den 8080'e değiştirildi ve Linux görüntülerindeki yeni kök olmayan 'app' kullanıcısı.

Debian 12

Kapsayıcı görüntüleri artık Debian 12 (Bookworm)kullanır. Debian, .NET kapsayıcı görüntülerinde varsayılan Linux dağıtımıdır.

Daha fazla bilgi için bkz. Debian 12'e yükseltilen Debian kapsayıcı görüntüleri.

Keskili Ubuntu resimleri

Chiseled Ubuntu görüntüleri .NET 8 için kullanılabilir. Keskili görüntüler çok küçük oldukları, paket yöneticisi veya kabukları olmadığı ve non-rootoldukları için küçültülmüş bir saldırı yüzeyine sahiptir. Bu tür bir görüntü, alet stili bilgi işlemden yararlanmak isteyen geliştiricilere yöneliktir.

Oymalı görüntüler varsayılan olarak küreselleşmeyi desteklemez. extra görüntüleri sağlanır, icu ve tzdata paketlerini içerir.

Genelleştirme ve kapsayıcılar hakkında daha fazla bilgi için bkz. Globalization Test App.

Çok platformlu kapsayıcı görüntüleri oluşturun

Docker, birden çok ortamda çalışan çok platformlu görüntülerin kullanılmasını ve oluşturulmasını destekler. .NET 8, mimarileri derlediğiniz .NET görüntüleriyle karıştırmanıza ve eşleştirmenize olanak tanıyan yeni bir desen sağlar. Örneğin, macOS kullanıyorsanız ve Azure'da bir x64 bulut hizmetini hedeflemek istiyorsanız, aşağıdaki gibi --platform anahtarını kullanarak görüntüyü oluşturabilirsiniz:

docker build --pull -t app --platform linux/amd64

.NET SDK artık geri yükleme sırasında $TARGETARCH değerlerini ve -a bağımsız değişkenini destekliyor. Aşağıdaki kod parçacığı bir örnek gösterir:

RUN dotnet restore -a $TARGETARCH

# Copy everything else and build app.
COPY aspnetapp/. .
RUN dotnet publish -a $TARGETARCH --self-contained false --no-restore -o /app

Daha fazla bilgi için Çok platformlu kapsayıcı desteğini iyileştirme blog gönderisine bakın.

ASP.NET bileşik görüntüleri

Kapsayıcılaştırma performansını iyileştirme çabasının bir parçası olarak, çalışma zamanının bileşik sürümüne sahip yeni ASP.NET Docker görüntüleri erişime sunuldu. Bu bileşik, birden çok CIL derlemesini tek bir çalıştırmaya hazır (R2R) çıktı dosyasında birleştirerek oluşturulur. Bu derlemeler tek bir görüntüye ekli olduğundan, jitting daha az zaman alır ve uygulamaların başlangıç performansı artar. Bileşik görüntünün normal ASP.NET görüntüsüne kıyasla diğer büyük avantajı, bileşik görüntülerin diskte daha küçük bir boyuta sahip olmasıdır.

Dikkat edilmesi gereken bir uyarı var. Bileşikler tek bir yapıma katıştırılmış birden çok bileşene sahip olduğundan, daha sıkı sürüm bağlantısı vardır. Uygulamalar çerçevenin özel sürümlerini veya ASP.NET ikili dosyalarını kullanamaz.

Bileşik görüntüler Alpine Linux, Ubuntu ("jammy") Chiseled ve Mariner Distroless platformları için mcr.microsoft.com/dotnet/aspnet deposundan kullanılabilir. Etiketler, ASP.NET Docker sayfasıüzerinde -composite soneki ile listelenir.

Kapsayıcı yayımlama

Oluşturulan görüntü varsayılanları

dotnet publish konteyner görüntüleri oluşturabilir. Varsayılan olarak görüntüler üretir ve bu da uygulamalarınızın varsayılan olarak güvenli kalmasına yardımcı olur. ContainerUser özelliğini ayarlayarak, örneğin rootile istediğiniz zaman bu varsayılanı değiştirin.

Varsayılan çıkış kapsayıcısı etiketi artık latest. Bu varsayılan, kapsayıcı alanındaki diğer araçlarla uyumludur ve kapsayıcıların iç geliştirme döngülerinde kullanımını kolaylaştırır.

Performans ve uyumluluk

.NET 8, kapsayıcıları uzak kayıt defterlerine, özellikle de Azure kayıt defterlerine göndermek için performansı geliştirmiştir. Hız artışı, katmanları tek seferde itmekten ve atomik yüklemeleri desteklemeyen kayıt defterleri için daha güvenilir bir parçalara ayırma mekanizmasından gelir.

Bu geliştirmeler ayrıca daha fazla kayıt defteri desteklendiği anlamına gelir: Harbor, Artifactory, Quay.io ve Podman.

Kimlik doğrulama

.NET 8, kayıt defterlerine kapsayıcılar gönderildiğinde OAuth belirteci değişim kimlik doğrulaması (Azure Yönetilen Kimliği) için destek ekler. Bu destek, artık herhangi bir kimlik doğrulama hatası olmadan Azure Container Registry gibi kayıt defterlerine gönderebileceğiniz anlamına gelir. Aşağıdaki komutlar örnek yayımlama akışını gösterir:

> az acr login -n <your registry name>
> dotnet publish -r linux-x64 -p PublishProfile=DefaultContainer

.NET uygulamalarını kapsayıcıya alma hakkında daha fazla bilgi için bkz. Dotnet publishile .NET uygulamasını kapsayıcıya alma.

tar.gz arşivde yayımla

.NET 8'den başlayarak, kapsayıcıyı doğrudan tar.gz arşivi olarak oluşturabilirsiniz. Bu özellik, iş akışınız basit değilse ve örneğin resimlerinizi göndermeden önce bir tarama aracı çalıştırmanızı gerektiriyorsa kullanışlıdır. Arşiv oluşturulduktan sonra taşıyabilir, tarayabilir veya yerel bir Docker araç zincirine yükleyebilirsiniz.

Arşivde yayımlamak için ContainerArchiveOutputPath özelliğini dotnet publish komutunuza ekleyin, örneğin:

dotnet publish \
  -p PublishProfile=DefaultContainer \
  -p ContainerArchiveOutputPath=./images/sdk-container-demo.tar.gz

Belirli bir dosya adına sahip bir klasör adı veya yol belirtebilirsiniz.

Ayrıca bkz.