Bagikan melalui


Apa yang baru dalam kontainer untuk .NET 8

Artikel ini menjelaskan fitur baru dalam kontainer untuk .NET 8.

Gambar kontainer

Perubahan berikut telah dilakukan pada gambar kontainer .NET untuk .NET 8:

Pengguna non-root

Gambar menyertakan non-root pengguna. Pengguna ini membuat gambar non-root mampu. Untuk menjalankan sebagai non-root, tambahkan baris berikut di akhir Dockerfile Anda (atau instruksi serupa dalam manifes Kubernetes Anda):

USER app

.NET 8 menambahkan variabel lingkungan untuk UID untuk non-root pengguna, yaitu 64198. Variabel lingkungan ini berguna untuk pengujian Kubernetes runAsNonRoot , yang mengharuskan pengguna kontainer diatur melalui UID dan bukan berdasarkan nama. Dockerfile ini menunjukkan contoh penggunaan.

Port default juga berubah dari port 80 ke 8080. Untuk mendukung perubahan ini, variabel ASPNETCORE_HTTP_PORTS lingkungan baru tersedia untuk mempermudah perubahan port. Variabel menerima daftar port, yang lebih sederhana dari format yang diperlukan oleh ASPNETCORE_URLS. Jika Anda mengubah port kembali ke port 80 menggunakan salah satu variabel ini, Anda tidak dapat menjalankan sebagai non-root.

Untuk informasi selengkapnya, lihat Default ASP.NET Core port diubah dari 80 menjadi 8080 dan Pengguna 'aplikasi' non-root baru di gambar Linux.

Debian 12

Gambar kontainer sekarang menggunakan Debian 12 (Bookworm). Debian adalah distro Linux default dalam gambar kontainer .NET.

Untuk informasi selengkapnya, lihat Gambar kontainer Debian yang ditingkatkan ke Debian 12.

Gambar Ubuntu pahat

Gambar Ubuntu pahat tersedia untuk .NET 8. Gambar yang di pahat memiliki permukaan yang diserang berkurang karena sangat kecil, tidak memiliki manajer paket atau shell, dan .non-root Jenis gambar ini untuk pengembang yang menginginkan manfaat komputasi gaya appliance.

Gambar yang di-chisel tidak mendukung globalisasi, secara default. extra gambar disediakan, yang mencakup icu paket dan tzdata .

Untuk informasi selengkapnya tentang globalisasi dan kontainer, lihat Aplikasi Pengujian Globalisasi.

Membuat gambar kontainer multi-platform

Docker mendukung penggunaan dan pembuatan gambar multi-platform yang berfungsi di beberapa lingkungan. .NET 8 memperkenalkan pola baru yang memungkinkan Anda mencampur dan mencocokkan arsitektur dengan gambar .NET yang Anda bangun. Sebagai contoh, jika Anda menggunakan macOS dan ingin menargetkan layanan cloud x64 di Azure, Anda dapat membangun gambar dengan menggunakan --platform sakelar sebagai berikut:

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

.NET SDK sekarang mendukung $TARGETARCH nilai dan -a argumen tentang pemulihan. Cuplikan kode berikut menunjukkan contoh:

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

Untuk informasi selengkapnya, lihat posting blog Meningkatkan dukungan kontainer multi-platform.

gambar komposit ASP.NET

Sebagai bagian dari upaya untuk meningkatkan performa kontainerisasi, citra Docker ASP.NET baru tersedia yang memiliki versi komposit runtime. Komposit ini dibangun dengan mengkompilasi beberapa rakitan MSIL ke dalam biner output siap jalan (R2R) tunggal. Karena rakitan ini disematkan ke dalam satu gambar, jitting membutuhkan lebih sedikit waktu, dan performa startup aplikasi meningkat. Keuntungan besar lainnya dari komposit daripada gambar ASP.NET reguler adalah bahwa gambar komposit memiliki ukuran yang lebih kecil pada disk.

Ada peringatan yang harus diperhatikan. Karena komposit memiliki beberapa rakitan yang disematkan ke dalam satu, komposit memiliki konpling versi yang lebih ketat. Aplikasi tidak dapat menggunakan versi kerangka kerja kustom atau biner ASP.NET.

Gambar komposit tersedia untuk platform Alpine Linux, Ubuntu ("jammy") Chiseled, dan Mariner Distroless dari mcr.microsoft.com/dotnet/aspnet repositori. Tag dicantumkan dengan akhiran -composite di halaman docker ASP.NET.

Penerbitan kontainer

Default gambar yang dihasilkan

dotnet publish dapat menghasilkan gambar kontainer. Ini default untuk menghasilkan non-root gambar, yang membantu aplikasi Anda tetap aman secara default. Ubah default ini kapan saja dengan mengatur ContainerUser propery, misalnya dengan root.

Tag kontainer output default sekarang latest. Default ini sejalan dengan alat lain di ruang kontainer dan membuat kontainer lebih mudah digunakan dalam perulangan pengembangan dalam.

Performa dan kompatibilitas

.NET 8 telah meningkatkan performa untuk mendorong kontainer ke registri jarak jauh, terutama registri Azure. Speedup berasal dari lapisan pendorongan dalam satu operasi dan, untuk registri yang tidak mendukung unggahan atomik, mekanisme penggugusan yang lebih andal.

Peningkatan ini juga berarti bahwa lebih banyak registri didukung: Harbor, Artifactory, Quay.io, dan Podman.

Autentikasi

.NET 8 menambahkan dukungan untuk autentikasi pertukaran token OAuth (Azure Managed Identity) saat mendorong kontainer ke registri. Dukungan ini berarti Anda sekarang dapat mendorong ke registri seperti Azure Container Registry tanpa kesalahan autentikasi apa pun. Perintah berikut menunjukkan contoh alur penerbitan:

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

Untuk informasi selengkapnya tentang kontainer aplikasi .NET, lihat Menampung aplikasi .NET dengan penerbitan dotnet.

Terbitkan ke arsip tar.gz

Mulai dari .NET 8, Anda dapat membuat kontainer secara langsung sebagai arsip tar.gz . Fitur ini berguna jika alur kerja Anda tidak mudah dan mengharuskan Anda, misalnya, menjalankan alat pemindaian di atas gambar Anda sebelum mendorongnya. Setelah arsip dibuat, Anda dapat memindahkannya, memindainya, atau memuatnya ke toolchain Docker lokal.

Untuk menerbitkan ke arsip, tambahkan properti ke ContainerArchiveOutputPath perintah Anda dotnet publish , misalnya:

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

Anda dapat menentukan nama folder atau jalur dengan nama file tertentu.

Lihat juga