.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:
- root olmayan kullanıcı
- Debian 12
- Yontulmuş Ubuntu görüntüleri
- Çok platformlu kapsayıcı görüntüleri oluşturma
- ASP.NET bileşik görüntüleri
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-root
olarak ç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_URLS
iç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-root
olarak ç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-root
oldukları 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 --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ı
- Performans ve uyumluluk
- kimlik doğrulaması
- tar.gz arşiv yayımlamayı
Oluşturulan görüntü varsayılanları
dotnet publish
konteyner görüntüleri oluşturabilir. Varsayılan olarakContainerUser
özelliğini ayarlayarak, örneğin root
ile 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.
- .NET 8'deki yenilikler