Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam artikel referensi ini, Anda mempelajari cara mengonfigurasi gambar kontainer yang dihasilkan saat menerbitkan aplikasi .NET sebagai kontainer. Artikel ini membahas berbagai properti yang dapat Anda atur untuk mengontrol gambar, lingkungan eksekusi, dan perintah yang dijalankan saat kontainer dimulai.
Mengonfigurasi properti kontainer
Anda dapat mengontrol banyak aspek kontainer yang dihasilkan melalui properti MSBuild. Secara umum, jika Anda dapat menggunakan perintah di Dockerfile
Nota
Satu-satunya pengecualian untuk ini adalah perintah RUN. Karena cara kontainer dibangun, perintah tersebut tidak dapat ditimulasi. Jika Anda memerlukan fungsionalitas ini, pertimbangkan untuk menggunakan Dockerfile untuk membangun gambar kontainer Anda.
Tidak ada cara untuk melakukan perintah RUN dengan .NET SDK. Perintah ini sering digunakan untuk menginstal beberapa paket OS atau membuat pengguna OS baru, atau sejumlah hal arbitrer. Jika Anda ingin tetap menggunakan fitur pembuatan kontainer .NET SDK, Anda dapat membuat gambar dasar kustom dengan perubahan ini lalu menggunakan gambar dasar ini. Untuk informasi selengkapnya, lihat ContainerBaseImage.
Bendera yang mengontrol gambar dasar
Properti berikut mengontrol gambar dasar mana yang digunakan untuk kontainer Anda dan bagaimana gambar tersebut dipilih:
ContainerBaseImage
Properti gambar dasar kontainer mengontrol gambar yang digunakan sebagai dasar untuk gambar Anda. Secara default, nilai berikut disimpulkan berdasarkan properti proyek Anda:
- Jika proyek Anda mandiri, gambar
mcr.microsoft.com/dotnet/runtime-depsdigunakan sebagai gambar dasar. - Jika proyek Anda adalah proyek ASP.NET Core, gambar
mcr.microsoft.com/dotnet/aspnetdigunakan sebagai gambar dasar. - Jika tidak, gambar
mcr.microsoft.com/dotnet/runtimedigunakan sebagai gambar dasar.
Tag gambar disimpulkan menjadi komponen numerik dari TargetFrameworkyang Anda pilih. Misalnya, proyek yang menargetkan net6.0 menghasilkan tag 6.0 gambar dasar yang disimpulkan, dan proyek net7.0-linux menggunakan tag 7.0, dan sebagainya.
Jika Anda menetapkan nilai di sini, Anda harus mengatur nama gambar yang sepenuhnya memenuhi syarat untuk digunakan sebagai dasar, termasuk tag apa pun yang Anda sukai:
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0</ContainerBaseImage>
</PropertyGroup>
Dengan .NET SDK versi 8.0.200, inferensi ContainerBaseImage ditingkatkan untuk mengoptimalkan ukuran dan keamanan:
- Menargetkan Pengidentifikasi Runtime
linux-musl-x64ataulinux-musl-arm64, secara otomatis memilih varian gambaralpineuntuk memastikan proyek Anda berjalan:- Jika proyek menggunakan
PublishAot=truemaka variannightly/runtime-depsjammy-chiseled-aotgambar dasar untuk ukuran dan keamanan terbaik. - Jika proyek menggunakan
InvariantGlobalization=falsemaka varian-extradigunakan untuk memastikan pelokalan masih berfungsi.
- Jika proyek menggunakan
Untuk informasi selengkapnya mengenai ukuran dan karakteristik varian gambar, lihat Laporan Ukuran Gambar Kontainer .NET 8.0.
ContainerFamily
Dimulai dengan .NET 8, Anda dapat menggunakan properti ContainerFamily MSBuild untuk memilih keluarga gambar kontainer yang disediakan Microsoft yang berbeda sebagai gambar dasar untuk aplikasi Anda. Saat diatur, nilai ini ditambahkan ke akhir tag khusus TFM yang dipilih, mengubah tag yang disediakan. Misalnya, untuk menggunakan varian Linux Alpine dari gambar dasar .NET, Anda dapat mengatur ContainerFamily ke alpine:
<PropertyGroup>
<ContainerFamily>alpine</ContainerFamily>
</PropertyGroup>
Konfigurasi proyek sebelumnya menghasilkan tag akhir 8.0-alpine untuk aplikasi penargetan .NET 8.
Bidang ini berbentuk bebas, dan sering kali dapat digunakan untuk memilih distribusi sistem operasi yang berbeda, konfigurasi paket default, atau rasa perubahan lainnya pada gambar dasar. Bidang ini diabaikan ketika ContainerBaseImage diatur. Untuk informasi selengkapnya, lihat Gambar kontainer .NET.
ContainerRuntimeIdentifier(s)
Properti ContainerRuntimeIdentifier menentukan OS dan arsitektur untuk kontainer Anda jika ContainerBaseImage mendukung beberapa platform. Misalnya, gambar mcr.microsoft.com/dotnet/runtime mendukung linux-x64, linux-arm, linux-arm64, dan win10-x64. Secara default, ini diatur ke RuntimeIdentifier digunakan saat menerbitkan kontainer. Biasanya, Anda tidak perlu mengatur properti ini secara eksplisit; sebagai gantinya, gunakan opsi -r dengan perintah dotnet publish. Jika gambar yang dipilih tidak mendukung RuntimeIdentifieryang ditentukan, kesalahan menunjukkan pengidentifikasi yang didukung.
Anda selalu dapat mengatur properti ContainerBaseImage ke nama gambar yang sepenuhnya memenuhi syarat, termasuk tag, untuk menghindari perlunya menggunakan properti ini sama sekali.
<PropertyGroup>
<ContainerRuntimeIdentifier>linux-arm64</ContainerRuntimeIdentifier>
</PropertyGroup>
Untuk menentukan beberapa pengidentifikasi runtime kontainer untuk gambar multi-arsitektur, gunakan serangkaian pengidentifikasi runtime yang dibatasi titik koma di properti ContainerRuntimeIdentifiers, mirip dengan mengatur beberapa TargetFrameworks:
<PropertyGroup>
<ContainerRuntimeIdentifiers>linux-x64;linux-arm64</ContainerRuntimeIdentifiers>
</PropertyGroup>
Penting
Properti ContainerRuntimeIdentifiers harus merupakan subset properti RuntimeIdentifiers . Jika kondisi ini tidak terpenuhi, bagian penting dari alur build mungkin gagal.
Mengatur beberapa ContainerRuntimeIdentifiers hasil dalam gambar multi-arsitektur yang dibuat. Untuk informasi selengkapnya, lihat Gambar multi-arsitektur.
Untuk informasi selengkapnya mengenai pengidentifikasi runtime yang didukung oleh .NET, lihat katalog RID di .
Gambar multi-arsitektur
Gambar multi-arsitektur memungkinkan gambar kontainer tunggal untuk mendukung beberapa arsitektur, menyederhanakan pengembangan dan penyebaran lintas platform. .NET SDK mendukung ini melalui ContainerRuntimeIdentifiers properti .
Dimulai dengan versi SDK 8.0.405, 9.0.102, dan 9.0.2xx, penerbitan kontainer multi-RID didukung. Saat menerbitkan dengan /t:PublishContainer:
- Jika satu
RuntimeIdentifieratauContainerRuntimeIdentifierditentukan, kontainer arsitektur tunggal dihasilkan seperti sebelumnya. - Jika tidak ada tunggal
RuntimeIdentifieryang ditentukan tetapi beberapaRuntimeIdentifiersatauContainerRuntimeIdentifiersdiatur, SDK menerbitkan aplikasi untuk setiap RID yang ditentukan dan menggabungkan gambar yang dihasilkan ke dalam Indeks Gambar OCI. Indeks ini memungkinkan beberapa gambar khusus arsitektur untuk berbagi satu nama.
Nota
Properti ContainerRuntimeIdentifiers harus merupakan subset properti RuntimeIdentifiers . Untuk informasi selengkapnya, lihat ContainerRuntimeIdentifiers.
Fitur ini menyederhanakan alur kerja kontainer di lingkungan arsitektur campuran. Misalnya, pengembang pada linux-x64 host dapat menerbitkan kontainer yang mendukung linux-x64 dan linux-arm64, memungkinkan penyebaran ke arsitektur tanpa mengubah nama gambar atau label.
Indeks Gambar OCI yang dihasilkan didukung secara luas dengan alat kontainer modern, meningkatkan kompatibilitas dan kemudahan penggunaan.
Bendera yang mengontrol metadata independen gambar yang dihasilkan
Properti berikut mengontrol metadata dan konfigurasi yang berlaku untuk gambar kontainer yang dihasilkan terlepas dari pengidentifikasi runtime target:
ContainerImageFormat
Anda dapat menggunakan ContainerImageFormat properti MSBuild untuk menentukan format gambar sebagai Docker atau OCI. Secara default, alat .NET menyimpulkan format dari gambar dasar. Misalnya, gambar dasar .NET menggunakan format application/vnd.docker.distribution.manifest.v2+jsonkhusus Docker . Namun, banyak alat modern lebih suka format application/vnd.oci.image.manifest.v1+jsonOCI . Untuk memaksa format tertentu, atur properti seperti yang ditunjukkan:
<PropertyGroup>
<ContainerImageFormat>OCI</ContainerImageFormat>
</PropertyGroup>
Kedua format sebagian besar dapat dipertukarkan tanpa kehilangan informasi.
Nota
Saat membangun gambar multi-arsitektur, format gambar yang dihasilkan selalu OCI.
ContainerImageTag
Properti tag gambar kontainer mengontrol tag yang dihasilkan untuk gambar. Untuk menentukan satu tag, gunakan ContainerImageTag dan untuk beberapa tag, gunakan ContainerImageTags.
Penting
Saat Anda menggunakan ContainerImageTags, Anda berakhir dengan beberapa gambar, satu per tag unik.
Tag sering digunakan untuk merujuk ke versi aplikasi yang berbeda, tetapi mereka juga dapat merujuk ke distribusi sistem operasi yang berbeda, atau bahkan konfigurasi yang berbeda.
Dimulai dengan .NET 8, ketika tag tidak disediakan, defaultnya adalah latest.
Untuk mengambil alih default, tentukan salah satu properti berikut:
<PropertyGroup>
<ContainerImageTag>1.2.3-alpha2</ContainerImageTag>
</PropertyGroup>
Untuk menentukan beberapa tag, gunakan kumpulan tag yang dibatasi titik koma di properti ContainerImageTags, mirip dengan mengatur beberapa TargetFrameworks:
<PropertyGroup>
<ContainerImageTags>1.2.3-alpha2;latest</ContainerImageTags>
</PropertyGroup>
Tag hanya dapat berisi hingga 127 karakter alfanumerik, titik, garis bawah, dan tanda hubung. Mereka harus dimulai dengan karakter alfanumerik atau garis bawah. Formulir lain menghasilkan kesalahan yang dilemparkan.
Nota
Saat menggunakan ContainerImageTags atau properti MSBuild apa pun yang memerlukan ;nilai yang dibatasi, pastikan pelepasan yang tepat saat memanggil dotnet publish dari baris perintah, terutama di lingkungan CI/CD. Aturan pelepasan berbeda antara PowerShell dan Bash. Contohnya:
dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags=`"1.2.3-alpha2`;latest`"
Di PowerShell, karakter ; dan " perlu diloloskan.
dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags='"1.2.3-alpha2;latest"'
Di Bash, hanya karakter " yang perlu dilepaskan.
Ini menghasilkan dua gambar yang dihasilkan: my-app:1.2.3-alpha2 dan my-app:latest.
Ujung
Jika Anda mengalami masalah dengan properti ContainerImageTags, pertimbangkan untuk mencakup variabel lingkungan ContainerImageTags sebagai gantinya:
$Env:ContainerImageTags='1.2.3;latest'; dotnet publish --os linux --arch x64 /t:PublishContainer
ContainerLabel
Label kontainer menambahkan label metadata ke kontainer. Label sering digunakan untuk menyimpan metadata versi dan penulisan untuk digunakan oleh pemindai keamanan dan alat infrastruktur lainnya. Anda dapat menentukan sejumlah label kontainer.
Simpul ContainerLabel memiliki dua atribut:
-
Include: Kunci label. -
Value: Nilai label (ini mungkin kosong).
<ItemGroup>
<ContainerLabel Include="org.contoso.businessunit" Value="contoso-university" />
</ItemGroup>
Untuk daftar label yang dibuat secara default, lihat label kontainer default.
ContainerRepository
Repositori kontainer adalah nama gambar itu sendiri, misalnya, dotnet/runtime atau my-app. Secara default, AssemblyName proyek digunakan.
<PropertyGroup>
<ContainerRepository>my-app</ContainerRepository>
</PropertyGroup>
Nama gambar terdiri dari satu atau beberapa segmen yang dibatasi garis miring, yang masing-masing hanya dapat berisi karakter alfanumerik huruf kecil, titik, garis bawah, dan tanda hubung, dan harus dimulai dengan huruf atau angka. Karakter lain mengakibatkan kesalahan dilemparkan.
Bendera yang mengontrol metadata eksekusi
Properti berikut mengontrol perilaku eksekusi khusus runtime dan pembuatan gambar multi-arsitektur:
ContainerAppCommandContainerAppCommandArgsContainerAppCommandInstructionContainerDefaultArgsContainerEnvironmentVariableContainerPortContainerPublishInParallelContainerUserContainerWorkingDirectory
ContainerAppCommand
Item konfigurasi perintah aplikasi adalah titik masuk logis aplikasi Anda. Untuk sebagian besar aplikasi, ini adalah AppHost, biner yang dapat dieksekusi yang dihasilkan untuk aplikasi Anda. Jika aplikasi Anda tidak menghasilkan AppHost, perintah ini biasanya dotnet <your project dll>. Nilai-nilai ini diterapkan setelah ENTRYPOINT dalam kontainer dasar Anda, atau secara langsung jika tidak ada ENTRYPOINT yang ditentukan.
Konfigurasi ContainerAppCommand memiliki satu properti Include, yang mewakili perintah, opsi, atau argumen yang akan digunakan dalam perintah entrypoint:
<ItemGroup Label="ContainerAppCommand Assignment">
<!-- This is how you would start the dotnet ef tool in your container -->
<ContainerAppCommand Include="dotnet" />
<ContainerAppCommand Include="ef" />
<!-- This shorthand syntax means the same thing, note the semicolon separating the tokens. -->
<ContainerAppCommand Include="dotnet;ef" />
</ItemGroup>
ContainerAppCommandArgs
Item konfigurasi args perintah aplikasi ini mewakili argumen yang diperlukan secara logis untuk aplikasi Anda yang harus diterapkan ke ContainerAppCommand. Secara default, tidak ada yang dihasilkan untuk aplikasi. Saat ada, arg diterapkan ke kontainer Anda saat berjalan.
Konfigurasi ContainerAppCommandArgs memiliki satu properti Include, yang mewakili opsi atau argumen untuk diterapkan ke perintah ContainerAppCommand.
<ItemGroup>
<!-- Assuming the ContainerAppCommand defined above,
this would be the way to force the database to update.
-->
<ContainerAppCommandArgs Include="database" />
<ContainerAppCommandArgs Include="update" />
<!-- This is the shorthand syntax for the same idea -->
<ContainerAppCommandArgs Include="database;update" />
</ItemGroup>
ContainerAppCommandInstruction
Konfigurasi instruksi perintah aplikasi membantu mengontrol cara ContainerEntrypoint, ContainerEntrypointArgs, ContainerAppCommand, ContainerAppCommandArgs, dan ContainerDefaultArgs digabungkan untuk membentuk perintah akhir yang dijalankan dalam kontainer. Ini sangat tergantung pada apakah ENTRYPOINT ada dalam gambar dasar. Properti ini mengambil salah satu dari tiga nilai: "DefaultArgs", "Entrypoint", atau "None".
-
Entrypoint:- Dalam mode ini, titik masuk didefinisikan oleh
ContainerAppCommand,ContainerAppCommandArgs, danContainerDefaultArgs.
- Dalam mode ini, titik masuk didefinisikan oleh
-
None:- Dalam mode ini, titik masuk didefinisikan oleh
ContainerEntrypoint,ContainerEntrypointArgs, danContainerDefaultArgs.
- Dalam mode ini, titik masuk didefinisikan oleh
-
DefaultArgs:- Ini adalah mode paling kompleks—jika tidak ada item
ContainerEntrypoint[Args]yang ada,ContainerAppCommand[Args]danContainerDefaultArgsdigunakan untuk membuat titik masuk dan perintah. Titik masuk gambar dasar untuk gambar dasar yang memilikinya dikodekan secara permanen kedotnetatau/usr/bin/dotnetdilewati sehingga Anda memiliki kontrol penuh. - Jika
ContainerEntrypointdanContainerAppCommandada, makaContainerEntrypointmenjadi titik masuk, danContainerAppCommandmenjadi perintah.
- Ini adalah mode paling kompleks—jika tidak ada item
Nota
Item konfigurasi ContainerEntrypoint dan ContainerEntrypointArgs tidak digunakan lagi pada .NET 8.
Penting
Ini untuk aplikasi pengguna tingkat lanjut-sebagian besar tidak perlu menyesuaikan titik masuk mereka ke derajat ini. Untuk informasi selengkapnya dan jika Anda ingin memberikan kasus penggunaan untuk skenario Anda, lihat Diskusi build kontainer GitHub: .NET SDK.
ContainerDefaultArgs
Item konfigurasi args default ini mewakili argumen yang dapat diganti pengguna untuk aplikasi Anda. Ini adalah cara yang baik untuk menyediakan default yang mungkin perlu dijalankan aplikasi Anda dengan cara yang memudahkan untuk memulai, namun masih mudah disesuaikan.
Konfigurasi ContainerDefaultArgs memiliki satu properti Include, yang mewakili opsi atau argumen untuk diterapkan ke perintah ContainerAppCommand.
<ItemGroup>
<!-- Assuming the ContainerAppCommand defined above,
this would be the way to force the database to update.
-->
<ContainerDefaultArgs Include="database" />
<ContainerDefaultArgs Include="update" />
<!-- This is the shorthand syntax for the same idea -->
<ContainerDefaultArgs Include="database;update" />
</ItemGroup>
ContainerEnvironmentVariable
Simpul variabel lingkungan kontainer memungkinkan Anda menambahkan variabel lingkungan ke kontainer. Variabel lingkungan dapat diakses oleh aplikasi yang berjalan di kontainer segera, dan sering digunakan untuk mengubah perilaku runtime aplikasi yang sedang berjalan.
Simpul ContainerEnvironmentVariable memiliki dua atribut:
-
Include: Nama variabel lingkungan. -
Value: Nilai variabel lingkungan.
<ItemGroup>
<ContainerEnvironmentVariable Include="LOGGER_VERBOSITY" Value="Trace" />
</ItemGroup>
Untuk informasi selengkapnya, lihat variabel lingkungan .NET.
Nota
Saat ini tidak dimungkinkan untuk mengatur variabel lingkungan dari .NET CLI saat menerbitkan gambar kontainer. Untuk informasi selengkapnya, lihat GitHub: Build kontainer .NET SDK.
ContainerPort
Port kontainer menambahkan port Protokol Kontrol Transmisi (TCP) atau Protokol Datagram Pengguna (UDP) ke daftar port yang diketahui untuk kontainer. Ini memungkinkan runtime kontainer seperti Docker untuk memetakan port ini ke komputer host secara otomatis. Ini sering digunakan sebagai dokumentasi untuk kontainer, tetapi juga dapat digunakan untuk mengaktifkan pemetaan port otomatis.
Simpul ContainerPort memiliki dua atribut:
-
Include: Nomor port yang akan diekspos. -
Type: Default ketcp, nilai yang valid adalahtcpatauudp.
<ItemGroup>
<ContainerPort Include="80" Type="tcp" />
</ItemGroup>
Dimulai dengan .NET 8, ContainerPort disimpulkan ketika tidak secara eksplisit disediakan berdasarkan beberapa variabel lingkungan ASP.NET terkenal:
ASPNETCORE_URLSASPNETCORE_HTTP_PORTSASPNETCORE_HTTPS_PORTS
Jika variabel lingkungan ini ada, nilainya diurai dan dikonversi ke pemetaan port TCP. Variabel lingkungan ini dibaca dari gambar dasar Anda, jika ada, atau dari variabel lingkungan yang ditentukan dalam proyek Anda melalui item ContainerEnvironmentVariable. Untuk informasi selengkapnya, lihat ContainerEnvironmentVariable.
ContainerPublishInParallel
Untuk kontainer multi-RID, jenis proyek tertentu (seperti Blazor WebAssembly) mungkin mengalami kondisi balapan build. Untuk mengatasi hal ini, dimulai dengan .NET SDK versi 8.0.408, 9.0.300, dan 10.0, Anda dapat mengontrol paralelisme proses penerbitan menggunakan ContainerPublishInParallel properti . Secara default, penerbitan terjadi secara paralel untuk setiap Pengidentifikasi Runtime (RID). Mengatur properti ini untuk false memastikan penerbitan berurutan, yang meningkatkan stabilitas tetapi mungkin memakan waktu lebih lama.
<PropertyGroup>
<ContainerPublishInParallel>false</ContainerPublishInParallel>
</PropertyGroup>
Untuk informasi selengkapnya tentang penerbitan multi-RID, lihat ContainerRuntimeIdentifier.
ContainerUser
Properti konfigurasi pengguna mengontrol pengguna default tempat kontainer berjalan. Ini sering digunakan untuk menjalankan kontainer sebagai pengguna non-root, yang merupakan praktik terbaik untuk keamanan. Ada beberapa batasan untuk mengetahui konfigurasi ini:
- Ini dapat mengambil berbagai formulir—nama pengguna, ID pengguna linux, nama grup, ID grup linux,
username:groupname, dan varian ID lainnya. - Tidak ada verifikasi bahwa pengguna atau grup yang ditentukan ada pada gambar.
- Mengubah pengguna dapat mengubah perilaku aplikasi, terutama sehubungan dengan hal-hal seperti izin Sistem File
.
Nilai default bidang ini bervariasi menurut TFM proyek dan sistem operasi target:
- Jika Anda menargetkan .NET 8 atau yang lebih tinggi dan menggunakan gambar runtime Microsoft, maka:
- di Linux, pengguna tanpa akar
appdigunakan (meskipun dirujuk oleh ID penggunanya) - pada Windows,
ContainerUserpengguna tanpa akar digunakan
- di Linux, pengguna tanpa akar
- Jika tidak, tidak ada
ContainerUserdefault yang digunakan
<PropertyGroup>
<ContainerUser>my-existing-app-user</ContainerUser>
</PropertyGroup>
Ujung
Variabel lingkungan APP_UID digunakan untuk mengatur informasi pengguna dalam kontainer Anda. Nilai ini dapat berasal dari variabel lingkungan yang ditentukan dalam gambar dasar Anda (seperti yang dilakukan gambar Microsoft .NET), atau Anda dapat mengaturnya sendiri melalui sintaks ContainerEnvironmentVariable.
Untuk mengonfigurasi aplikasi Anda agar berjalan sebagai pengguna root, atur properti ContainerUser ke root. Di file proyek Anda, tambahkan yang berikut ini:
<PropertyGroup>
<ContainerUser>root</ContainerUser>
</PropertyGroup>
Atau, Anda dapat mengatur nilai ini saat memanggil dotnet publish dari baris perintah:
dotnet publish -p ContainerUser=root
ContainerWorkingDirectory
Simpul direktori kerja kontainer mengontrol direktori kerja kontainer, direktori yang perintah dijalankan jika tidak perintah lain dijalankan.
Secara default, nilai direktori /app digunakan sebagai direktori kerja.
<PropertyGroup>
<ContainerWorkingDirectory>/bin</ContainerWorkingDirectory>
</PropertyGroup>
Bendera yang mengontrol tujuan gambar yang dihasilkan
Properti berikut mengontrol tempat gambar kontainer yang dihasilkan disimpan atau diterbitkan:
ContainerArchiveOutputPath
Untuk membuat gambar kontainer dalam arsip tar.gz , gunakan ContainerArchiveOutputPath properti . 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 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. Jika Anda menentukan nama folder, nama file yang dihasilkan untuk file arsip gambar diberi nama $(ContainerRepository).tar.gz. Arsip ini dapat berisi beberapa tag di dalamnya, hanya karena satu file dibuat untuk semua ContainerImageTags.
ContainerRegistry
Properti registri kontainer mengontrol registri tujuan, tempat gambar yang baru dibuat akan didorong. Secara default didorong ke daemon Docker lokal, tetapi Anda juga dapat menentukan registri jarak jauh. Saat menggunakan registri jarak jauh yang memerlukan autentikasi, Anda mengautentikasi menggunakan mekanisme docker login terkenal. Untuk informasi selengkapnya, Lihat mengautentikasi ke registri kontainer untuk detail selengkapnya. Untuk contoh konkret penggunaan properti ini, pertimbangkan contoh XML berikut:
<PropertyGroup>
<ContainerRegistry>registry.mycorp.com:1234</ContainerRegistry>
</PropertyGroup>
Alat ini mendukung penerbitan ke registri apa pun yang mendukung API HTTP Docker Registry V2. Ini termasuk registri berikut secara eksplisit (dan kemungkinan banyak lebih implisit):
- Azure Container Registry
- Registri Kontainer Amazon Elastic
- Registri Artefak Google
- Docker Hub
- Paket GitHub
- Container Registry yang dihosting GitLab
- Quay.io
Untuk catatan tentang bekerja dengan registri ini, lihat catatan khusus registri .
LocalRegistry
Properti LocalRegistry MSBuild menentukan alat kontainer lokal yang akan digunakan saat mendorong ke sumber lokal. Nilai yang didukung adalah docker dan podman. Jika tidak diatur, SDK menentukan alat berdasarkan ketersediaan:
- Jika keduanya
dockerdanpodmanada, dandockermerupakan alias untukpodman, makapodmandigunakan. - Jika hanya
dockerada,dockerdigunakan. - Jika hanya
podmanada,podmandigunakan. - Jika tidak ada, kesalahan akan muncul.
Untuk secara eksplisit mengatur alat registri lokal, gunakan konfigurasi berikut:
<PropertyGroup>
<LocalRegistry>podman</LocalRegistry>
</PropertyGroup>
Konfigurasi penamaan gambar kontainer
Gambar kontainer mengikuti konvensi penamaan tertentu. Nama gambar terdiri dari beberapa bagian, registri, port opsional, repositori, dan tag dan keluarga opsional.
REGISTRY[:PORT]/REPOSITORY[:TAG[-FAMILY]]
Misalnya, pertimbangkan nama gambar mcr.microsoft.com/dotnet/runtime:8.0-alpine yang sepenuhnya memenuhi syarat:
-
mcr.microsoft.comadalah registri (dan dalam hal ini mewakili registri kontainer Microsoft). -
dotnet/runtimeadalah repositori (tetapi beberapa menganggap ini sebagaiuser/repository). -
8.0-alpineadalah tag dan keluarga (keluarga adalah penentu opsional yang membantu membedakan kemasan OS).
Beberapa properti yang dijelaskan di bagian berikut sesuai dengan mengelola bagian dari nama gambar yang dihasilkan. Pertimbangkan tabel berikut yang memetakan hubungan antara nama gambar dan properti build:
| Bagian nama gambar | Properti MSBuild | Contoh nilai |
|---|---|---|
REGISTRY[:PORT] |
ContainerRegistry |
mcr.microsoft.com:443 |
PORT |
ContainerPort |
:443 |
REPOSITORY |
ContainerRepository |
dotnet/runtime |
TAG |
ContainerImageTag |
8.0 |
FAMILY |
ContainerFamily |
-alpine |
Label kontainer default
Label sering digunakan untuk menyediakan metadata yang konsisten pada gambar kontainer. Alat kontainer bawaan menyediakan beberapa label default untuk meningkatkan kualitas gambar yang dihasilkan. Semua pembuatan label default dapat dinonaktifkan dengan mengatur ContainerGenerateLabels ke false. Selain itu, setiap label default memiliki bendera pengaktifan individual yang dapat diatur ke false untuk menonaktifkan label tertentu.
Jika memungkinkan, properti MSBuild yang ada menyediakan nilai untuk label ini. Properti lain memungkinkan kontrol eksplisit nilainya.
| Anotasi | Nilai standar | Nama properti khusus | Nama properti fallback | Nama properti yang diaktifkan | Catatan |
|---|---|---|---|---|---|
org.opencontainers.image.created dan org.opencontainers.artifact.created |
Format RFC 3339 dari DateTime UTC saat ini | ContainerGenerateLabelsImageCreated |
|||
org.opencontainers.artifact.description dan org.opencontainers.image.description |
ContainerDescription |
Description |
ContainerGenerateLabelsImageDescription |
||
org.opencontainers.image.authors |
ContainerAuthors |
Authors |
ContainerGenerateLabelsImageAuthors |
||
org.opencontainers.image.url |
ContainerInformationUrl |
PackageProjectUrl |
ContainerGenerateLabelsImageUrl |
||
org.opencontainers.image.documentation |
ContainerDocumentationUrl |
PackageProjectUrl |
ContainerGenerateLabelsImageDocumentation |
||
org.opencontainers.image.version |
ContainerVersion |
PackageVersion |
ContainerGenerateLabelsImageVersion |
||
org.opencontainers.image.vendor |
ContainerVendor |
ContainerGenerateLabelsImageVendor |
|||
org.opencontainers.image.licenses |
ContainerLicenseExpression |
PackageLicenseExpression |
ContainerGenerateLabelsImageLicenses |
||
org.opencontainers.image.title |
ContainerTitle |
Title |
ContainerGenerateLabelsImageTitle |
||
org.opencontainers.image.base.name |
ContainerBaseImage |
ContainerGenerateLabelsImageBaseName |
|||
org.opencontainers.image.base.digest |
ContainerGenerateLabelsImageBaseDigest |
Ini adalah hash SHA dari gambar dasar yang dipilih. Tersedia dari .NET SDK 9.0.100 dan seterusnya. | |||
org.opencontainers.image.source |
PrivateRepositoryUrl |
ContainerGenerateLabelsImageSource |
Hanya ditulis jika PublishRepositoryUrl adalah true. Juga bergantung pada infrastruktur Sourcelink yang menjadi bagian dari build. |
||
org.opencontainers.image.revision |
SourceRevisionId |
ContainerGenerateLabelsImageRevision |
Hanya ditulis jika PublishRepositoryUrl adalah true. Juga bergantung pada infrastruktur Sourcelink yang menjadi bagian dari build. |
Lihat juga
- Membuat kontainer aplikasi .NET dengan penerbitan dotnet
- gambar kontainer .NET