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
-
Debian 12 - gambar Chiseled Ubuntu
- Membuat gambar kontainer multi-platform
- ASP.NET gambar komposit
Pengguna yang bukan root
Gambar menampilkan pengguna non-root
. Pengguna ini membuat gambar-gambar dengan kemampuan non-root
. Untuk berjalan 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 pengguna non-root
, yaitu 1654. Variabel lingkungan ini berguna untuk pengujian kubernetes runAsNonRoot
, yang mengharuskan pengguna kontainer diatur melalui UID dan bukan berdasarkan nama. dockerfile
Port default juga berubah dari port 80
menjadi 8080
. Untuk mendukung perubahan ini, variabel lingkungan baru ASPNETCORE_HTTP_PORTS
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 berjalan sebagai non-root
.
Untuk informasi selengkapnya, lihat port default ASP.NET Core yang diubah dari 80 menjadi 8080 dan pengguna 'app' non-root baru di citra 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 yang dipoles
Chiseled Ubuntu gambar tersedia untuk .NET 8. Gambar yang ditebang memiliki permukaan yang lebih kecil untuk diserang karena ukurannya sangat kecil, tidak memiliki pengelola paket atau shell, dan non-root
. Jenis citra ini ditujukan untuk pengembang yang menginginkan manfaat dari komputasi bergaya peralatan.
Gambar berukir secara bawaan memang tidak mendukung globalisasi.
extra
gambar telah disediakan, yang mencakup paket icu
dan tzdata
.
Untuk informasi selengkapnya tentang globalisasi dan kontainer, lihat Aplikasi Pengujian Globalisasi.
Membuat gambar kontainer multi-platform
Docker mendukung penggunaan dan pembangunan citra multi-platform yang dapat digunakan di berbagai 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 sakelar --platform
sebagai berikut:
docker build --pull -t app --platform linux/amd64
.NET SDK sekarang mendukung nilai $TARGETARCH
dan argumen -a
saat 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 pada posting blog Meningkatkan dukungan kontainer multi-platform.
gambar komposit ASP.NET
Sebagai bagian dari upaya untuk meningkatkan performa kontainerisasi, kini tersedia citra Docker ASP.NET baru yang menggabungkan versi runtime. Komposit ini dibuat dengan mengompilasi beberapa assembly CIL ke dalam satu output biner siap dijalankan (R2R). 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 digabungkan menjadi satu, komposit memiliki penggandengan versi yang lebih erat. 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 repositori mcr.microsoft.com/dotnet/aspnet
. Tag dicantumkan dengan akhiran -composite
di halaman Docker ASP.NET.
Penerbitan kontainer
- pengaturan default gambar yang dihasilkan
- Performa dan kompatibilitas
- Autentikasi
- Terbitkan ke arsip tar.gz
Pengaturan default gambar yang dihasilkan
dotnet publish
dapat menghasilkan gambar kontainer. Ini default untuk menghasilkan gambar non-root
, yang membantu aplikasi Anda tetap aman secara default. Ubah default ini kapan saja dengan mengatur properti ContainerUser
, misalnya dengan root
.
Tag kontainer keluaran standar sekarang adalah latest
. Pengaturan bawaan ini sejalan dengan alat lain di industri kontainer dan membuat kontainer lebih mudah digunakan dalam siklus pengembangan internal.
Performa dan kompatibilitas
.NET 8 telah meningkatkan performa untuk mendorong kontainer ke registri jarak jauh, terutama registri Azure. Peningkatan kecepatan berasal dari dorongan lapisan dalam satu operasi dan, untuk registri yang tidak mendukung pengunggahan atomik, mekanisme pemecahan yang lebih andal.
Peningkatan ini juga berarti bahwa lebih banyak registri didukung: Harbor, Artifactory, Quay.io, dan Podman.
Otentikasi
.NET 8 menambahkan support untuk autentikasi pertukaran token OAuth (Azure Managed Identity) saat mengunggah 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 lebih lanjut tentang mengkonteinerkan aplikasi .NET, lihatlah Mengkonteinerkan aplikasi .NET dengan dotnet publish.
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 sederhana dan mengharuskan Anda, misalnya, menjalankan alat pemindaian pada gambar Anda sebelum mengunggahnya. Setelah arsip dibuat, Anda dapat memindahkannya, memindainya, atau memuatnya ke toolchain Docker lokal.
Untuk menerbitkan ke arsip, tambahkan properti ContainerArchiveOutputPath
ke perintah dotnet publish
Anda, 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.