.NET 8 kapsayıcılarındaki yenilikler

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

Kapsayıcı 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 kullanıcı non-root içerir. Bu kullanıcı görüntülerin non-root uygun olmasını sağlar. olarak non-rootçalıştırmak için Dockerfile dosyanızın sonuna aşağıdaki satırı (veya Kubernetes bildirimlerinize benzer bir yönergeyi) ekleyin:

USER app

.NET 8, kullanıcı için UID için non-root 64198 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ı da bağlantı noktasından 80 olarak 8080değ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, tarafından ASPNETCORE_URLSgereken biçimden daha basit olan bağlantı noktalarının listesini kabul eder. Bu değişkenlerden birini kullanarak bağlantı noktasını yeniden bağlantı noktasına 80 değiştirirseniz, olarak non-rootçalıştıramazsınız.

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

Debian 12

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

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

Keskili Ubuntu resimleri

Keskili Ubuntu görüntüleri .NET 8 için kullanılabilir. Keskili görüntülerin çok küçük olduğundan, paket yöneticisi veya kabuğu olmadığından ve olduğu için saldırıya uğrayan yüzey azaltılmış bir non-rootyüzeye sahiptir. Bu tür bir görüntü, alet stili bilgi işlemden yararlanmak isteyen geliştiricilere yöneliktir.

Keskili görüntüler varsayılan olarak genelleştirmeyi desteklemez. extra ve paketlerini içeren icutzdata görüntüler sağlanır.

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

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

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 anahtarı kullanarak --platform görüntüyü oluşturabilirsiniz:

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

.NET SDK'sı artık geri yüklemede -a değerleri ve bağımsız değişkeni destekliyor$TARGETARCH. 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.

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

Kapsayıcıya alma 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 kullanılabilir. Bu bileşik, birden çok MSIL derlemesini tek bir çalıştırmaya hazır (R2R) çıkış ikilisinde derleyerek 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şiklerin tek bir derlemeye katıştırılmış birden çok derlemesi olduğundan, daha sıkı sürüm bağlaması vardır. Uygulamalar çerçevenin özel sürümlerini veya ASP.NET ikili dosyalarını kullanamaz.

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

Kapsayıcı yayımlama

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

dotnet publish kapsayıcı görüntüleri oluşturabilir. Varsayılan olarak görüntülerin üretilmesinon-root, uygulamalarınızın varsayılan olarak güvenli kalmasına yardımcı olur. Bu varsayılanı istediğiniz zaman, örneğin ile rootuygun şekilde ayarlayarak ContainerUser değiştirin.

Varsayılan çıkış kapsayıcısı etiketi artık latestşeklindedir. 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ızlandırma, katmanları tek bir işlemde göndermekten ve atomik karşıya yüklemeleri desteklemeyen kayıt defterleri için daha güvenilir bir öbekleme 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ğrulaması

.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ılı hale getirme hakkında daha fazla bilgi için bkz . Dotnet publish ile .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 komutunuza dotnet publish özelliğini ekleyinContainerArchiveOutputPath, ö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.