.NET uygulama başvurularını kapsayıcıya alma
Bu başvuru makalesinde, bir .NET uygulamasını kapsayıcı olarak yayımladığınızda oluşturulan kapsayıcı görüntüsünü yapılandırmayı öğreneceksiniz. Bu makale, görüntüyü, yürütme ortamını ve kapsayıcı başlatıldığında çalıştırılacak komutları denetlemek için ayarlayabileceğiniz çeşitli özellikleri kapsar.
Kapsayıcı görüntüsünü yapılandırma
MSBuild özellikleri aracılığıyla oluşturulan kapsayıcının birçok yönünü denetleyebilirsiniz. Genel olarak, bir Dockerfile kullanarak bazı yapılandırmalar ayarlayabilirseniz, aynı işlemi MSBuild aracılığıyla da yapabilirsiniz.
Not
Bunun tek özel durumları RUN
komutlarıdır. Kapsayıcıların oluşturulma biçimi nedeniyle bunlar öykünemez. Bu işleve ihtiyacınız varsa kapsayıcı görüntülerinizi oluşturmak için Dockerfile kullanmayı düşünebilirsiniz.
.NET SDK ile RUN
komutları gerçekleştirmenin hiçbir yolu yoktur. Bu komutlar genellikle bazı işletim sistemi paketlerini yüklemek veya yeni bir işletim sistemi kullanıcısı ya da herhangi bir sayıda rastgele şey oluşturmak için kullanılır. .NET SDK kapsayıcı oluşturma özelliğini kullanmaya devam etmek isterseniz, bunun yerine bu değişikliklerle özel bir temel görüntü oluşturabilir ve ardından bu temel görüntüyü kullanabilirsiniz. Daha fazla bilgi için bkz. ContainerBaseImage
.
ContainerArchiveOutputPath
tar.gz arşivinde kapsayıcı görüntüsü oluşturmak için ContainerArchiveOutputPath
özelliğini kullanın. 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. Klasör adını belirtirseniz, görüntü arşiv dosyası için oluşturulan dosya adı $(ContainerRepository).tar.gz
olarak adlandırılır. Bu arşivler, yalnızca tüm ContainerImageTags
için tek bir dosya oluşturulduğu için içinde birden çok etiket içerebilir.
Kapsayıcı görüntüsü adlandırma yapılandırması
Kapsayıcı görüntüleri belirli bir adlandırma kuralına uyar. Görüntünün adı birkaç bölümden, kayıt defterinden, isteğe bağlı bağlantı noktasından, depodan ve isteğe bağlı etiket ve aileden oluşur.
REGISTRY[:PORT]/REPOSITORY[:TAG[-FAMILY]]
Örneğin, tam mcr.microsoft.com/dotnet/runtime:8.0-alpine
görüntü adını göz önünde bulundurun:
-
mcr.microsoft.com
kayıt defteridir (ve bu örnekte Microsoft kapsayıcı kayıt defterini temsil eder). -
dotnet/runtime
depodur (ancak bazıları bunuuser/repository
). -
8.0-alpine
etiket ve ailedir (aile, işletim sistemi paketlemesini belirsizleştirmeye yardımcı olan isteğe bağlı bir tanımlayıcıdır).
Aşağıdaki bölümlerde açıklanan bazı özellikler, oluşturulan görüntü adının bölümlerini yönetmeye karşılık gelir. Görüntü adı ile derleme özellikleri arasındaki ilişkiyi eşleyen aşağıdaki tabloyu göz önünde bulundurun:
Resim adı bölümü | MSBuild özelliği | Örnek değerler |
---|---|---|
REGISTRY[:PORT] |
ContainerRegistry |
mcr.microsoft.com:443 |
PORT |
ContainerPort |
:443 |
REPOSITORY |
ContainerRepository |
dotnet/runtime |
TAG |
ContainerImageTag |
8.0 |
FAMILY |
ContainerFamily |
-alpine |
Aşağıdaki bölümlerde, oluşturulan kapsayıcı görüntüsünü denetlemek için kullanılabilecek çeşitli özellikler açıklanmaktadır.
ContainerBaseImage
Kapsayıcı temel görüntüsü özelliği, görüntünüz için temel olarak kullanılan görüntüyü denetler. Varsayılan olarak, projenizin özelliklerine göre aşağıdaki değerler çıkarılır:
- Projeniz kendi içindeyse, temel görüntü olarak
mcr.microsoft.com/dotnet/runtime-deps
görüntüsü kullanılır. - Projeniz bir ASP.NET Core projesiyse, temel görüntü olarak
mcr.microsoft.com/dotnet/aspnet
görüntüsü kullanılır. - Aksi takdirde
mcr.microsoft.com/dotnet/runtime
görüntüsü temel görüntü olarak kullanılır.
Görüntünün etiketi, seçtiğiniz TargetFramework
sayısal bileşeni olarak çıkarılır. Örneğin, net6.0
hedefleyen bir proje, çıkarsanan temel görüntünün 6.0
etiketine neden olur ve net7.0-linux
bir proje 7.0
etiketini kullanır vb.
Burada bir değer ayarlarsanız, tercih ettiğiniz herhangi bir etiket de dahil olmak üzere temel olarak kullanılacak görüntünün tam adını ayarlamanız gerekir:
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0</ContainerBaseImage>
</PropertyGroup>
.NET SDK sürüm 8.0.200 ile, boyutu ve güvenliği iyileştirmek için ContainerBaseImage
çıkarımı iyileştirilir:
-
linux-musl-x64
veyalinux-musl-arm64
Çalışma Zamanı Tanımlayıcılarını hedeflemek, projenizin çalıştığından emin olmak içinalpine
görüntü değişkenlerini otomatik olarak seçer:- Proje
PublishAot=true
kullanıyorsa en iyi boyut ve güvenlik için temel görüntününnightly/runtime-deps
jammy-chiseled-aot
değişkeni. - Proje
InvariantGlobalization=false
kullanıyorsa, yerelleştirmenin hala çalıştığından emin olmak için-extra
değişkenleri kullanılır.
- Proje
Görüntü değişkenlerinin boyutları ve özellikleri hakkında daha fazla bilgi için bkz. .NET 8.0 Kapsayıcı Görüntüsü Boyutu Raporu
ContainerFamily
.NET 8'den başlayarak ContainerFamily
MSBuild özelliğini kullanarak uygulamanızın temel görüntüsü olarak Microsoft tarafından sağlanan farklı kapsayıcı görüntüleri ailesini seçebilirsiniz. Bu değer ayarlandığında, seçilen TFM'ye özgü etiketin sonuna eklenir ve sağlanan etiket değiştirilir. Örneğin, .NET temel görüntülerinin Alpine Linux değişkenlerini kullanmak için ContainerFamily
alpine
olarak ayarlayabilirsiniz:
<PropertyGroup>
<ContainerFamily>alpine</ContainerFamily>
</PropertyGroup>
Yukarıdaki proje yapılandırması, .NET 8'i hedefleyen bir uygulama için son 8.0-alpine
etiketine neden olur.
Bu alan serbest biçimlidir ve genellikle farklı işletim sistemi dağıtımlarını, varsayılan paket yapılandırmalarını veya temel görüntüdeki değişikliklerin diğer tür seçmek için kullanılabilir.
ContainerBaseImage
ayarlandığında bu alan yoksayılır. Daha fazla bilgi için bkz. .NET kapsayıcı görüntülerini
ContainerRuntimeIdentifier(s)
ContainerRuntimeIdentifier
özelliği, ContainerBaseImage
birden çok platformu destekliyorsa kapsayıcınızın işletim sistemini ve mimarisini belirtir. Örneğin, mcr.microsoft.com/dotnet/runtime
görüntüsü linux-x64
, linux-arm
, linux-arm64
ve win10-x64
destekler. Varsayılan olarak, kapsayıcı yayımlanırken kullanılan RuntimeIdentifier
ayarlanır. Genellikle bu özelliği açıkça ayarlamanız gerekmez; bunun yerine, -r
komutuyla dotnet publish
seçeneğini kullanın. Seçilen görüntü belirtilen RuntimeIdentifier
desteklemiyorsa, desteklenen tanımlayıcıları bir hata gösterir.
Bu özelliği kullanmak zorunda kalmamak için, ContainerBaseImage
özelliğini istediğiniz zaman etiketi de dahil olmak üzere tam resim adına ayarlayabilirsiniz.
<PropertyGroup>
<ContainerRuntimeIdentifier>linux-arm64</ContainerRuntimeIdentifier>
</PropertyGroup>
Çok mimarili görüntüler için birden çok kapsayıcı çalışma zamanı tanımlayıcısı belirtmek için, ContainerRuntimeIdentifiers
özelliğinde birden çok TargetFrameworks
ayarlamaya benzer şekilde noktalı virgülle ayrılmış bir çalışma zamanı tanımlayıcısı kümesi kullanın:
<PropertyGroup>
<ContainerRuntimeIdentifiers>linux-x64;linux-arm64</ContainerRuntimeIdentifiers>
</PropertyGroup>
.NET tarafından desteklenen çalışma zamanı tanımlayıcıları hakkında daha fazla bilgi için bkz. RID kataloğu.
ContainerRegistry
Kapsayıcı kayıt defteri özelliği, yeni oluşturulan görüntünün gönderileceği hedef kayıt defterini denetler. Varsayılan olarak yerel Docker daemon'a gönderilir, ancak bir uzak kayıt defteri de belirtebilirsiniz. Kimlik doğrulaması gerektiren bir uzak kayıt defteri kullanırken, iyi bilinen docker login
mekanizmalarını kullanarak kimlik doğrulaması yaparsınız. Daha fazla bilgi için bkz. Kapsayıcı kayıt defterlerinde kimlik doğrulaması daha fazla ayrıntı için. Bu özelliği kullanmanın somut bir örneği için aşağıdaki XML örneğini göz önünde bulundurun:
<PropertyGroup>
<ContainerRegistry>registry.mycorp.com:1234</ContainerRegistry>
</PropertyGroup>
Bu araç, Docker Kayıt Defteri HTTP API V2destekleyen herhangi bir kayıt defterinde yayımlamayı destekler. Bu, aşağıdaki kayıt defterlerini açıkça (ve büyük olasılıkla daha örtük olarak) içerir:
- Azure Container Registry
- Amazon Elastic Container Registry
- Google Artifact Registry
- Docker Hub
- GitHub Packages
- GitLab tarafından barındırılan Container Registry
- Quay.io
Bu kayıt defterleriyle çalışma hakkında notlar için,kayıt defterine özgü
ContainerRepository
Kapsayıcı deposu görüntünün adıdır, örneğin dotnet/runtime
veya my-app
. Varsayılan olarak, projenin AssemblyName
kullanılır.
<PropertyGroup>
<ContainerRepository>my-app</ContainerRepository>
</PropertyGroup>
Görüntü adları, her biri yalnızca küçük harfli alfasayısal karakterler, nokta, alt çizgi ve tire içerebilen ve harf veya sayı ile başlaması gereken bir veya daha fazla eğik çizgiyle ayrılmış kesimden oluşur. Diğer karakterler hatayla sonuçlanır.
ContainerImageTag(s)
Kapsayıcı görüntüsü etiketi özelliği, görüntü için oluşturulan etiketleri denetler. Tek bir etiket belirtmek için ContainerImageTag
ve birden çok etiket için ContainerImageTags
kullanın.
Önemli
ContainerImageTags
kullandığınızda, benzersiz etiket başına bir tane olacak şekilde birden çok görüntü alırsınız.
Etiketler genellikle bir uygulamanın farklı sürümlerine başvurmak için kullanılır, ancak farklı işletim sistemi dağıtımlarına, hatta farklı yapılandırmalara da başvurabilir.
.NET 8'den başlayarak, bir etiket sağlanmayan varsayılan değer latest
.
Varsayılanı geçersiz kılmak için aşağıdakilerden birini belirtin:
<PropertyGroup>
<ContainerImageTag>1.2.3-alpha2</ContainerImageTag>
</PropertyGroup>
Birden çok etiket belirtmek için, ContainerImageTags
özelliğinde birden çok TargetFrameworks
ayarlamaya benzer şekilde noktalı virgülle ayrılmış bir etiket kümesi kullanın:
<PropertyGroup>
<ContainerImageTags>1.2.3-alpha2;latest</ContainerImageTags>
</PropertyGroup>
Etiketler en fazla 127 alfasayısal karakter, nokta, alt çizgi ve tire içerebilir. Alfasayısal karakter veya alt çizgi ile başlamalıdır. Diğer formlar bir hatanın oluşmasına neden olur.
Not
ContainerImageTags
veya ;
sınırlandırılmış değerleri yapılandırması gereken herhangi bir MSBuild özelliği kullanılırken. komut satırından dotnet publish
çağırıyorsanız (çoğu CI/CD ortamında olduğu gibi), ortamın sınırlayıcıları ve tırnak işaretlerini ayıramamasının sınırlamalarını anlamanız ve bu nedenle doğru kaçış gerektirmesi gerekir. Bu, PowerShell ile Bash arasında farklılık gösterir. İlgili ortamlarında aşağıdaki dotnet publish
komutlarını göz önünde bulundurun:
dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags=`"1.2.3-alpha2`;latest`"
PowerShell'de hem ;
hem de "
karakterlerinin kaçış karakteri olması gerekir.
dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags=\"1.2.3-alpha2;latest\"
Bash'te yalnızca "
karakterinin kaçılması gerekir.
Bunun sonucunda iki görüntü oluşturulur: my-app:1.2.3-alpha2
ve my-app:latest
.
Bahşiş
ContainerImageTags
özelliğiyle ilgili sorunlarla karşılaşıyorsanız bunun yerine ContainerImageTags
bir ortam değişkeninin kapsamını belirlemeyi göz önünde bulundurun:
$Env:ContainerImageTags='1.2.3;latest'; dotnet publish --os linux --arch x64 /t:PublishContainer
ContainerLabel
Kapsayıcı etiketi kapsayıcıya bir meta veri etiketi ekler. Etiketler genellikle güvenlik tarayıcıları ve diğer altyapı araçları tarafından kullanılmak üzere sürüm ve yazma meta verilerini depolamak için kullanılır. İstediğiniz sayıda kapsayıcı etiketi belirtebilirsiniz.
ContainerLabel
düğümünde iki öznitelik vardır:
-
Include
: Etiketin anahtarı. -
Value
: Etiketin değeri (bu boş olabilir).
<ItemGroup>
<ContainerLabel Include="org.contoso.businessunit" Value="contoso-university" />
</ItemGroup>
Varsayılan olarak oluşturulan etiketlerin listesi için bkz.varsayılan kapsayıcı etiketleri
Kapsayıcı yürütmeyi yapılandırma
Kapsayıcının yürütülmesini denetlemek için aşağıdaki MSBuild özelliklerini kullanabilirsiniz.
ContainerWorkingDirectory
Kapsayıcı çalışma dizini düğümü, kapsayıcının çalışma dizinini denetler; başka komut çalıştırılmazsa komutların içinde yürütülür.
Varsayılan olarak, çalışma dizini olarak /app
dizin değeri kullanılır.
<PropertyGroup>
<ContainerWorkingDirectory>/bin</ContainerWorkingDirectory>
</PropertyGroup>
ContainerPort
Kapsayıcı bağlantı noktası, kapsayıcı için bilinen bağlantı noktaları listesine İletim Denetimi Protokolü (TCP) veya Kullanıcı Veri Birimi Protokolü (UDP) bağlantı noktalarını ekler. Bu, Docker gibi kapsayıcı çalışma zamanlarının bu bağlantı noktalarını otomatik olarak konak makinesine eşlemesini sağlar. Bu genellikle kapsayıcı için belge olarak kullanılır, ancak otomatik bağlantı noktası eşlemesini etkinleştirmek için de kullanılabilir.
ContainerPort
düğümünde iki öznitelik vardır:
-
Include
: Kullanıma sunma bağlantı noktası numarası. -
Type
: varsayılan olaraktcp
, geçerli değerlertcp
veyaudp
.
<ItemGroup>
<ContainerPort Include="80" Type="tcp" />
</ItemGroup>
.NET 8'den başlayarak, ContainerPort
, birçok iyi bilinen ASP.NET ortam değişkenine göre açıkça sağlanmadığında çıkarılır:
ASPNETCORE_URLS
ASPNETCORE_HTTP_PORTS
ASPNETCORE_HTTPS_PORTS
Bu ortam değişkenleri varsa, değerleri ayrıştırılır ve TCP bağlantı noktası eşlemelerine dönüştürülür. Bu ortam değişkenleri, varsa temel görüntünüzden veya projenizde tanımlanan ortam değişkenlerinden ContainerEnvironmentVariable
öğeler aracılığıyla okunur. Daha fazla bilgi için bkz. ContainerEnvironmentVariable.
ContainerEnvironmentVariable
Kapsayıcı ortam değişkeni düğümü, kapsayıcıya ortam değişkenleri eklemenize olanak tanır. Ortam değişkenleri kapsayıcıda çalışan uygulama tarafından hemen erişilebilir ve genellikle çalışan uygulamanın çalışma zamanı davranışını değiştirmek için kullanılır.
ContainerEnvironmentVariable
düğümünde iki öznitelik vardır:
-
Include
: Ortam değişkeninin adı. -
Value
: Ortam değişkeninin değeri.
<ItemGroup>
<ContainerEnvironmentVariable Include="LOGGER_VERBOSITY" Value="Trace" />
</ItemGroup>
Daha fazla bilgi için bkz. .NET ortam değişkenlerini
Not
Şu anda kapsayıcı görüntüsü yayımlarken .NET CLI'dan ortam değişkenlerini ayarlamak mümkün değildir. Daha fazla bilgi için bkz. GitHub: .NET SDK kapsayıcı derlemeleri.
Kapsayıcı komutlarını yapılandırma
Varsayılan olarak, kapsayıcı araçları uygulamanız için oluşturulan AppHost ikili dosyasını (uygulamanız bir AppHost kullanıyorsa) veya dotnet
komutunu ve uygulamanızın DLL'sini kullanarak uygulamanızı başlatır.
Ancak, ContainerAppCommand
, ContainerAppCommandArgs
, ContainerDefaultArgs
ve ContainerAppCommandInstruction
birleşimini kullanarak uygulamanızın nasıl yürütülebileceğini denetleyebilirsiniz.
Farklı temel görüntüler kapsayıcı ENTRYPOINT
ve COMMAND
özelliklerinin farklı bileşimlerini kullandığından ve bunların tümünü destekleyebilmek istediğinizden bu farklı yapılandırma noktaları vardır. Varsayılanlar çoğu uygulama için kullanılabilir olmalıdır, ancak uygulama başlatma davranışınızı özelleştirmek istiyorsanız şunları yapmalısınız:
- Çalıştırılacak ikiliyi belirleyin ve
ContainerAppCommand
olarak ayarlayın - Uygulamanızın çalışması için hangi bağımsız değişkenlerin gerekli olduğunu belirleyin ve bunları
ContainerAppCommandArgs
olarak ayarlayın - Hangi bağımsız değişkenlerin (varsa) isteğe bağlı olduğunu ve kullanıcı tarafından geçersiz kılınabileceğini belirleyin ve bunları
ContainerDefaultArgs
olarak ayarlayın -
ContainerAppCommandInstruction
DefaultArgs
olarak ayarlama
Daha fazla bilgi için aşağıdaki yapılandırma öğelerine bakın.
ContainerAppCommand
Uygulama komut yapılandırma öğesi, uygulamanızın mantıksal giriş noktasıdır. Çoğu uygulama için bu AppHost, uygulamanız için oluşturulan yürütülebilir ikili dosyadır. Uygulamanız bir AppHost oluşturmuyorsa, bu komut genellikle dotnet <your project dll>
. Bu değerler, temel kapsayıcınızdaki herhangi bir ENTRYPOINT
sonra veya doğrudan ENTRYPOINT
tanımlanmadıysa uygulanır.
ContainerAppCommand
yapılandırması, entrypoint komutunda kullanılacak komutu, seçeneği veya bağımsız değişkeni temsil eden tek bir Include
özelliğine sahiptir:
<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
Bu uygulama komutu args yapılandırma öğesi, uygulamanız için ContainerAppCommand
uygulanması gereken mantıksal olarak gerekli bağımsız değişkenleri temsil eder. Varsayılan olarak, bir uygulama için hiçbiri oluşturulmaz. Mevcut olduğunda, bağımsız değişkenler çalıştırıldığında kapsayıcınıza uygulanır.
ContainerAppCommandArgs
yapılandırması, Include
komutuna uygulanacak seçeneği veya bağımsız değişkeni temsil eden tek bir ContainerAppCommand
özelliğine sahiptir.
<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>
ContainerDefaultArgs
Bu varsayılan bağımsız yapılandırma öğesi, uygulamanız için kullanıcı tarafından geçersiz kılınabilir bağımsız değişkenleri temsil eder. Bu, uygulamanızın başlatmayı ve yine de özelleştirmeyi kolaylaştıran bir şekilde çalışması gerekebilecek varsayılan değerler sağlamanın iyi bir yoludur.
ContainerDefaultArgs
yapılandırması, Include
komutuna uygulanacak seçeneği veya bağımsız değişkeni temsil eden tek bir ContainerAppCommand
özelliğine sahiptir.
<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>
ContainerAppCommandInstruction
Uygulama komut yönerge yapılandırması, kapsayıcıda çalıştırılan son komutu oluşturmak için ContainerEntrypoint
, ContainerEntrypointArgs
, ContainerAppCommand
, ContainerAppCommandArgs
ve ContainerDefaultArgs
birleştirilerek nasıl birleştirildiğini denetlemeye yardımcı olur. Bu, temel görüntüde bir ENTRYPOINT
olup olmadığını büyük ölçüde bağlıdır. Bu özellik üç değerden birini alır: "DefaultArgs"
, "Entrypoint"
veya "None"
.
-
Entrypoint
:- Bu modda, giriş noktası
ContainerAppCommand
,ContainerAppCommandArgs
veContainerDefaultArgs
tarafından tanımlanır.
- Bu modda, giriş noktası
-
None
:- Bu modda, giriş noktası
ContainerEntrypoint
,ContainerEntrypointArgs
veContainerDefaultArgs
tarafından tanımlanır.
- Bu modda, giriş noktası
-
DefaultArgs
:- Bu en karmaşık moddur;
ContainerEntrypoint[Args]
öğelerden hiçbiri yoksa, giriş noktası ve komutu oluşturmak içinContainerAppCommand[Args]
veContainerDefaultArgs
kullanılır.dotnet
veya/usr/bin/dotnet
sabit kodlanmış temel görüntülerin temel görüntü giriş noktası atlanır, böylece tam denetime sahip olursunuz. - Hem
ContainerEntrypoint
hem deContainerAppCommand
varsa,ContainerEntrypoint
giriş noktası olur veContainerAppCommand
komut olur.
- Bu en karmaşık moddur;
Not
ContainerEntrypoint
ve ContainerEntrypointArgs
yapılandırma öğeleri .NET 8 itibarıyla kullanım dışıdır.
Önemli
Bu, kullanıcıların çoğuna yönelik gelişmiş uygulamaların giriş noktalarını bu dereceye kadar özelleştirmesi gerekmemelidir. Daha fazla bilgi için ve senaryolarınız için kullanım örnekleri sağlamak istiyorsanız bkz. GitHub: .NET SDK kapsayıcısı derleme tartışmaları.
ContainerUser
Kullanıcı yapılandırma özelliği, kapsayıcının çalıştığı varsayılan kullanıcıyı denetler. Bu genellikle kapsayıcıyı kök olmayan bir kullanıcı olarak çalıştırmak için kullanılır. Bu, güvenlik için en iyi yöntemdir. Bu yapılandırmanın dikkate alınması gereken birkaç kısıtlama vardır:
- Kullanıcı adı, Linux kullanıcı kimlikleri, grup adı, linux grup kimliği,
username:groupname
ve diğer kimlik varyantları gibi çeşitli formlar alabilir. - Belirtilen kullanıcının veya grubun görüntüde var olduğuna dair bir doğrulama yoktur.
- Kullanıcının değiştirilmesi, özellikle Dosya Sistemi izinleri gibi konularda uygulamanın davranışını değiştirebilir.
Bu alanın varsayılan değeri proje TFM'sine ve hedef işletim sistemine göre değişir:
- .NET 8 veya üzerini hedefleyip Microsoft çalışma zamanı görüntülerini kullanıyorsanız:
- Linux'ta köksüz kullanıcı
app
kullanılır (kullanıcı kimliği tarafından başvurulsa da) - Windows'ta köksüz kullanıcı
ContainerUser
kullanılır
- Linux'ta köksüz kullanıcı
- Aksi takdirde varsayılan
ContainerUser
kullanılmaz
<PropertyGroup>
<ContainerUser>my-existing-app-user</ContainerUser>
</PropertyGroup>
Bahşiş
APP_UID
ortam değişkeni, kapsayıcınızdaki kullanıcı bilgilerini ayarlamak için kullanılır. Bu değer, temel görüntünüzde tanımlanan ortam değişkenlerinden (Microsoft .NET görüntülerinin yaptığı gibi) gelebilir veya ContainerEnvironmentVariable
söz dizimi aracılığıyla kendiniz ayarlayabilirsiniz.
Uygulamanızı kök kullanıcı olarak çalışacak şekilde yapılandırmak için ContainerUser
özelliğini root
olarak ayarlayın. Proje dosyanıza aşağıdakileri ekleyin:
<PropertyGroup>
<ContainerUser>root</ContainerUser>
</PropertyGroup>
Alternatif olarak, komut satırından dotnet publish
çağırırken bu değeri ayarlayabilirsiniz:
dotnet publish -p ContainerUser=root
Varsayılan kapsayıcı etiketleri
Etiketler genellikle kapsayıcı görüntülerinde tutarlı meta veriler sağlamak için kullanılır. Bu paket, oluşturulan görüntülerin daha iyi korunabilmesini teşvik etmek için bazı varsayılan etiketler sağlar.
-
org.opencontainers.image.created
, DateTime.UtcNowgeçerli değerinin ISO 8601 biçimine ayarlanır.
Daha fazla bilgi için bkz. Var olan etiket altyapısının üzerine geleneksel etiketler uygulama.
Ayrıca bkz.
- dotnet publish ile bir .NET uygulamasını kapsayıcılı hale
- .NET kapsayıcı görüntülerini