.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ı
- Debian 12
- Keskili Ubuntu resimleri
- Çok platformlu kapsayıcı görüntüleri oluşturma
- Bileşik görüntüleri ASP.NET
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 8080
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, tarafından ASPNETCORE_URLS
gereken 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-root
yü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 icu
tzdata
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ı
- Performans ve uyumluluk
- Kimlik Doğrulaması
- tar.gz arşivde yayımla
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 root
uygun ş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.