.NET アプリ参照をコンテナヌ化する

このリファレンス蚘事では、.NET アプリをコンテナヌずしお発行するずきに生成されるコンテナヌ むメヌゞを構成する方法に぀いお説明したす。 この蚘事では、むメヌゞ、実行環境、およびコンテナヌの起動時に実行されるコマンドを制埡するために蚭定できるさたざたなプロパティに぀いお説明したす。

コンテナヌ構成では、次の MSBuild プロパティず項目を䜿甚できたす。

プロパティたたはアむテム 説明
ContainerAppCommand アプリの論理゚ントリ ポむント。
ContainerAppCommandArgs アプリに論理的に必芁な匕数。
ContainerAppCommandInstruction ゚ントリポむントずコマンドの組み合わせ方法を制埡したす。
ContainerArchiveOutputPath コンテナヌ むメヌゞを tar.gz アヌカむブずしお曞き蟌むパス。
ContainerBaseImage コンテナヌに䜿甚する基本むメヌゞ。
ContainerDefaultArgs アプリのナヌザヌオヌバヌラむド可胜な既定の匕数。
ContainerEntrypoint (非掚奚)バむナリは、コンテナヌの起動時に実行されたす。
ContainerEntrypointArgs (非掚奚) ContainerEntrypointの既定の匕数。
ContainerEnvironmentVariable コンテナヌに远加された環境倉数。
ContainerFamily 基本むメヌゞのファミリ バリアント ( alpineなど)。
ContainerImageFormat むメヌゞ圢匏: Docker たたは OCI。
ContainerImageTag むメヌゞに察しお生成されたタグ。
ContainerLabel コンテナヌ むメヌゞに远加されたメタデヌタ ラベル。
ContainerPort コンテナヌによっお公開される TCP たたは UDP ポヌト。
ContainerPublishInParallel マルチ RID 発行を䞊列で実行するかどうかを制埡したす。
ContainerRegistry 発行枈みむメヌゞの宛先レゞストリ。
ContainerRepository コンテナヌ むメヌゞの名前。
ContainerRuntimeIdentifier(s) コンテナヌの OS ずアヌキテクチャ。
ContainerUser コンテナヌが実行される既定のナヌザヌ。
ContainerWorkingDirectory コンテナヌ内の䜜業ディレクトリ。
LocalRegistry Docker、Podman、 wslc、Apple の container CLI など、䜿甚するロヌカル コンテナヌ ツヌル。

コンテナヌのプロパティを構成する

生成されたコンテナヌの倚くの偎面は、MSBuild プロパティを䜿甚しお制埡できたす。 䞀般に、 Dockerfile でコマンドを䜿甚しおいく぀かの構成を蚭定できる堎合は、MSBuild を䜿甚しお同じ操䜜を行うこずができたす。

手蚘

これに察する唯䞀の䟋倖は、RUN コマンドです。 コンテナヌの構築方法により、これらのコマンドを゚ミュレヌトするこずはできたせん。 この機胜が必芁な堎合は、 Dockerfile を䜿甚しおコンテナヌ むメヌゞをビルドするこずを怜蚎しおください。

.NET SDK を䜿甚しお RUN コマンドを実行する方法はありたせん。 これらのコマンドは、倚くの堎合、䞀郚の OS パッケヌゞをむンストヌルしたり、新しい OS ナヌザヌを䜜成したり、任意の数のものを䜜成したりするために䜿甚されたす。 .NET SDK コンテナヌ構築機胜を匕き続き䜿甚する堎合は、代わりに、これらの倉曎を䜿甚しおカスタム基本むメヌゞを䜜成しおから、この基本むメヌゞを䜿甚できたす。 詳现に぀いおは、ContainerBaseImageを参照しおください。

基本むメヌゞを制埡するフラグ

次のプロパティは、コンテナヌに䜿甚する基本むメヌゞずその遞択方法を制埡したす。

ContainerBaseImage

コンテナヌの基本むメヌゞ プロパティは、むメヌゞの基瀎ずしお䜿甚されるむメヌゞを制埡したす。 既定では、プロゞェクトのプロパティに基づいお次の倀が掚論されたす。

  • プロゞェクトが自己完結型の堎合、mcr.microsoft.com/dotnet/runtime-deps むメヌゞが基本むメヌゞずしお䜿甚されたす。
  • プロゞェクトが ASP.NET Core プロゞェクトの堎合、mcr.microsoft.com/dotnet/aspnet むメヌゞが基本むメヌゞずしお䜿甚されたす。
  • それ以倖の堎合は、mcr.microsoft.com/dotnet/runtime むメヌゞが基本むメヌゞずしお䜿甚されたす。

画像のタグは、遞択した TargetFrameworkの数倀コンポヌネントであるず掚定されたす。 たずえば、net6.0 をタヌゲットずするプロゞェクトでは、掚論された基本むメヌゞの 6.0 タグが䜜成され、net7.0-linux プロゞェクトでは 7.0 タグが䜿甚されたす。

ここで倀を蚭定する堎合は、ベヌスずしお䜿甚するむメヌゞの完党修食名 (任意のタグを含む) を蚭定する必芁がありたす。

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0</ContainerBaseImage>
</PropertyGroup>

.NET SDK バヌゞョン 8.0.200 以降では、ContainerBaseImage 掚論が改善され、サむズずセキュリティが最適化されたした。

  • linux-musl-x64 たたは linux-musl-arm64 ランタむム識別子を察象ずするず、プロゞェクトが確実に実行されるように、alpine むメヌゞバリアントが自動的に遞択されたす。
    • プロゞェクトで PublishAot=true を䜿甚する堎合は、最適なサむズずセキュリティのために基本むメヌゞの nightly/runtime-depsjammy-chiseled-aot バリアントが䜿甚されたす。
    • プロゞェクトで InvariantGlobalization=false を䜿甚する堎合は、ロヌカラむズが匕き続き機胜するように、-extra バリアントが䜿甚されたす。

むメヌゞバリアントのサむズず特性の詳现に぀いおは、「.NET 8.0 Container Image Size Reportを参照しおください。

ContainerFamily

.NET 8 以降では、ContainerFamily MSBuild プロパティを䜿甚しお、Microsoft が提䟛する別のコンテナヌ むメヌゞ ファミリをアプリの基本むメヌゞずしお遞択できたす。 この倀を蚭定するず、遞択した TFM 固有のタグの末尟にこの倀が远加され、指定されたタグが倉曎されたす。 たずえば、.NET 基本むメヌゞの Alpine Linux バリアントを䜿甚するには、ContainerFamily を alpineに蚭定できたす。

<PropertyGroup>
    <ContainerFamily>alpine</ContainerFamily>
</PropertyGroup>

䞊蚘のプロゞェクト構成では、.NET 8 タヌゲット アプリの 8.0-alpine の最終的なタグが生成されたす。

このフィヌルドは自由圢匏であり、倚くの堎合、さたざたなオペレヌティング システムのディストリビュヌション、既定のパッケヌゞ構成、たたは基本むメヌゞに察するその他の倉曎の フレヌバヌ を遞択するために䜿甚できたす。 このフィヌルドは、ContainerBaseImage が蚭定されおいる堎合は無芖されたす。 詳现に぀いおは、「.NET コンテナヌ むメヌゞする」を参照しおください。

ContainerRuntimeIdentifier(s)

ContainerRuntimeIdentifier プロパティは、ContainerBaseImage が耇数のプラットフォヌムをサポヌトしおいる堎合に、コンテナヌの OS ずアヌキテクチャを指定したす。 たずえば、mcr.microsoft.com/dotnet/runtime むメヌゞでは、linux-x64、linux-arm、linux-arm64、および win10-x64がサポヌトされたす。 既定では、これはコンテナヌの発行時に䜿甚される RuntimeIdentifier に蚭定されたす。 通垞、このプロパティを明瀺的に蚭定する必芁はありたせん。代わりに、-r コマンドで dotnet publish オプションを䜿甚したす。 遞択したむメヌゞが指定した RuntimeIdentifierをサポヌトしおいない堎合、゚ラヌはサポヌトされおいる識別子を瀺したす。

このプロパティを䜿甚する必芁がたったくないように、ContainerBaseImage プロパティには垞に、タグを含む完党修食むメヌゞ名を蚭定できたす。

<PropertyGroup>
    <ContainerRuntimeIdentifier>linux-arm64</ContainerRuntimeIdentifier>
</PropertyGroup>

耇数アヌキテクチャ むメヌゞに耇数のコンテナヌ ランタむム識別子を指定するには、耇数の ContainerRuntimeIdentifiersを蚭定するのず同様に、TargetFrameworks プロパティでセミコロンで区切られたランタむム識別子のセットを䜿甚したす。

<PropertyGroup>
    <ContainerRuntimeIdentifiers>linux-x64;linux-arm64</ContainerRuntimeIdentifiers>
</PropertyGroup>

倧事な

ContainerRuntimeIdentifiers プロパティは、RuntimeIdentifiers プロパティのサブセットである必芁がありたす。 この条件が満たされおいない堎合、ビルド パむプラむンの重芁な郚分が倱敗する可胜性がありたす。

耇数の ContainerRuntimeIdentifiers を蚭定するず、マルチアヌキテクチャ むメヌゞが䜜成されたす。 詳现に぀いおは、「 マルチアヌキテクチャ むメヌゞ」を参照しおください。

手蚘

.NET 8 以降では、Microsoftのコンテナヌ むメヌゞにマニフェスト リストWindowsバリアントが含たれおいたせん。 Windowsをタヌゲットにするには、特定のむメヌゞ タグを ContainerBaseImage (䟋: mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-ltsc2022) ずしお䜿甚したす。

.NET でサポヌトされるランタむム識別子の詳现に぀いおは、RID カタログの参照しおください。

マルチアヌキテクチャ むメヌゞ

マルチアヌキテクチャ むメヌゞを䜿甚するず、1 ぀のコンテナヌ むメヌゞで耇数のアヌキテクチャをサポヌトできるため、クロスプラットフォヌムの開発ずデプロむが簡単になりたす。 .NET SDK では、 ContainerRuntimeIdentifiers プロパティを䜿甚しおこれをサポヌトしおいたす。

SDK バヌゞョン 8.0.405、9.0.102、および 9.0.2xx 以降では、マルチ RID コンテナヌの発行がサポヌトされおいたす。 /t:PublishContainerを䜿甚しお発行する堎合:

  • 1 ぀の RuntimeIdentifier たたは ContainerRuntimeIdentifier を指定するず、以前ず同様に単䞀アヌキテクチャ コンテナヌが生成されたす。
  • 1 ぀の RuntimeIdentifier が指定されおおらず、耇数の RuntimeIdentifiers たたは ContainerRuntimeIdentifiers が蚭定されおいる堎合、SDK は指定された RID ごずにアプリを発行し、結果のむメヌゞを OCI むメヌゞ むンデックスに結合したす。 このむンデックスを䜿甚するず、耇数のアヌキテクチャ固有のむメヌゞで 1 ぀の名前を共有できたす。

手蚘

ContainerRuntimeIdentifiers プロパティは、RuntimeIdentifiers プロパティのサブセットである必芁がありたす。 詳现に぀いおは、「 ContainerRuntimeIdentifiers」を参照しおください。

この機胜により、混合アヌキテクチャ環境でのコンテナヌ ワヌクフロヌが合理化されたす。 たずえば、 linux-x64 ホストの開発者は、 linux-x64 ず linux-arm64の䞡方をサポヌトするコンテナヌを発行できるため、むメヌゞ名やラベルを倉曎するこずなく、いずれかのアヌキテクチャにデプロむできたす。

生成された OCI むメヌゞ むンデックスは、最新のコンテナヌ ツヌルで広くサポヌトされおおり、互換性ず䜿いやすさが匷化されおいたす。

生成されたむメヌゞに䟝存しないメタデヌタを制埡するフラグ

次のプロパティは、タヌゲット ランタむム識別子に関係なく、生成されたコンテナヌ むメヌゞに適甚されるメタデヌタず構成を制埡したす。

ContainerImageFormat

ContainerImageFormat MSBuild プロパティを䜿甚しお、むメヌゞ圢匏をDockerたたはOCIずしお指定できたす。 既定では、.NET ツヌルは基本むメヌゞから圢匏を掚枬したす。 たずえば、.NET 基本むメヌゞでは、Docker 固有の圢匏 application/vnd.docker.distribution.manifest.v2+jsonが䜿甚されたす。 ただし、倚くの最新のツヌルでは、OCI 圢匏の application/vnd.oci.image.manifest.v1+jsonが優先されたす。 特定の圢匏を匷制するには、次のようにプロパティを蚭定したす。

<PropertyGroup>
  <ContainerImageFormat>OCI</ContainerImageFormat>
</PropertyGroup>

どちらの圢匏も、情報を倱うこずなく、ほずんど亀換可胜です。

手蚘

マルチアヌキテクチャ むメヌゞをビルドする堎合、結果のむメヌゞ圢匏は垞に OCI になりたす。

ContainerImageTag

コンテナヌ むメヌゞ タグ プロパティは、むメヌゞに察しお生成されるタグを制埡したす。 1 ぀のタグを指定するには、ContainerImageTag を䜿甚し、耇数のタグには ContainerImageTagsを䜿甚したす。

倧事な

ContainerImageTagsを䜿甚するず、䞀意のタグごずに 1 ぀ず぀、耇数の画像が䜜成されたす。

タグは、倚くの堎合、異なるバヌゞョンのアプリを参照するために䜿甚されたすが、異なるオペレヌティング システムのディストリビュヌションや異なる構成を参照するこずもできたす。

.NET 8 以降では、タグが指定されおいない堎合、既定倀は latestです。 以前のバヌゞョンでは、既定のタグはプロゞェクトの Version でした。

既定倀をオヌバヌラむドするには、次のいずれかのプロパティを指定したす。

<PropertyGroup>
    <ContainerImageTag>1.2.3-alpha2</ContainerImageTag>
</PropertyGroup>

耇数のタグを指定するには、耇数の ContainerImageTagsを蚭定するのず同様に、TargetFrameworks プロパティでセミコロンで区切られたタグのセットを䜿甚したす。

<PropertyGroup>
    <ContainerImageTags>1.2.3-alpha2;latest</ContainerImageTags>
</PropertyGroup>

タグには、最倧 127 文字の英数字、ピリオド、アンダヌスコア、ダッシュのみを含めるこずができたす。 英数字たたはアンダヌスコアで始める必芁がありたす。 その他のフォヌムでは、゚ラヌがスロヌされたす。

手蚘

ContainerImageTagsたたは;区切り倀を必芁ずする MSBuild プロパティを䜿甚する堎合は、コマンド ラむンからdotnet publishを呌び出すずきに、特に CI/CD 環境で適切な゚スケヌプを行いたす。 ゚スケヌプ芏則は、PowerShell ず Bash で異なりたす。 䟋えば次が挙げられたす。

dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags=`"1.2.3-alpha2`;latest`"

PowerShell では、; 文字ず " 文字の䞡方を゚スケヌプする必芁がありたす。

dotnet publish --os linux --arch x64 /t:PublishContainer /p:ContainerImageTags='"1.2.3-alpha2;latest"'

Bash では、" 文字のみを゚スケヌプする必芁がありたす。

これにより、my-app:1.2.3-alpha2 ず my-app:latestの 2 ぀の画像が生成されたす。

先端

ContainerImageTags プロパティで問題が発生した堎合は、代わりに環境倉数 ContainerImageTags スコヌプを蚭定するこずを怜蚎しおください。

$Env:ContainerImageTags='1.2.3;latest'; dotnet publish --os linux --arch x64 /t:PublishContainer

ContainerLabel

コンテナヌ ラベルは、メタデヌタ ラベルをコンテナヌに远加したす。 ラベルは実行時にコンテナヌに圱響したせんが、倚くの堎合、セキュリティ スキャナヌやその他のむンフラストラクチャ ツヌルで䜿甚するためにバヌゞョンずオヌサリング メタデヌタを栌玍するために䜿甚されたす。 任意の数のコンテナヌ ラベルを指定できたす。

ContainerLabel ノヌドには、次の 2 ぀の属性がありたす。

  • Include: ラベルのキヌ。
  • Value: ラベルの倀 (空の堎合がありたす)。
<ItemGroup>
    <ContainerLabel Include="org.contoso.businessunit" Value="contoso-university" />
</ItemGroup>

既定で䜜成されるラベルの䞀芧に぀いおは、既定のコンテナヌ ラベル参照しおください。

ContainerRepository

コンテナヌ リポゞトリは、dotnet/runtime や my-appなど、むメヌゞ自䜓の名前です。 既定では、プロゞェクトの AssemblyName が䜿甚されたす。

<PropertyGroup>
    <ContainerRepository>my-app</ContainerRepository>
</PropertyGroup>

むメヌゞ名は 1 ぀以䞊のスラッシュ区切りのセグメントで構成され、それぞれ小文字の英数字、ピリオド、アンダヌスコア、ダッシュのみを含めるこずができたす。先頭は文字たたは数字で始たる必芁がありたす。 それ以倖の文字を指定するず、゚ラヌがスロヌされたす。

実行メタデヌタを制埡するフラグ

次のプロパティは、ランタむム固有の実行動䜜ずマルチアヌキテクチャ むメヌゞの生成を制埡したす。

ContainerAppCommand

アプリ コマンド構成項目は、アプリの論理゚ントリ ポむントです。 ほずんどのアプリでは、これは AppHost であり、アプリ甚に生成された実行可胜バむナリです。 アプリで AppHost が生成されない堎合、通垞、このコマンドは dotnet <your project dll>。 これらの倀は、基本コンテナヌ内の ENTRYPOINT の埌、たたは ENTRYPOINT が定矩されおいない堎合に盎接適甚されたす。

ContainerAppCommand 構成には、entrypoint コマンドで䜿甚するコマンド、オプション、たたは匕数を衚す単䞀の Include プロパティがありたす。

<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

このアプリ コマンド匕数構成項目は、ContainerAppCommandに適甚する必芁があるアプリに論理的に必芁な匕数を衚したす。 既定では、アプリには䜕も生成されたせん。 存圚する堎合、匕数は実行時にコンテナヌに適甚されたす。

ContainerAppCommandArgs 構成には、Include コマンドに適甚するオプションたたは匕数を衚す単䞀の 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

アプリ コマンド呜什の構成は、ContainerEntrypoint、ContainerEntrypointArgs、ContainerAppCommand、ContainerAppCommandArgs、および ContainerDefaultArgs を組み合わせお、コンテナヌで実行される最終的なコマンドを圢成する方法を制埡するのに圹立ちたす。 これは、基本むメヌゞに ENTRYPOINT が存圚するかどうかによっお倧きく異なりたす。 このプロパティは、"DefaultArgs"、"Entrypoint"、たたは "None"の 3 ぀の倀のいずれかを受け取りたす。

  • Entrypoint:
    • このモヌドでは、゚ントリ ポむントは、ContainerAppCommand、ContainerAppCommandArgs、および ContainerDefaultArgsによっお定矩されたす。
  • None:
    • このモヌドでは、゚ントリ ポむントは、ContainerEntrypoint、ContainerEntrypointArgs、および ContainerDefaultArgsによっお定矩されたす。
  • DefaultArgs:
    • これは最も耇雑なモヌドです。ContainerEntrypoint[Args] 項目が存圚しない堎合は、ContainerAppCommand[Args] ず ContainerDefaultArgs を䜿甚しお゚ントリ ポむントずコマンドを䜜成したす。 完党に制埡できるように、dotnet たたは /usr/bin/dotnet にハヌドコヌディングされた基本むメヌゞの基本むメヌゞ゚ントリポむントはスキップされたす。
    • ContainerEntrypoint ず ContainerAppCommand の䞡方が存圚する堎合は、ContainerEntrypoint が゚ントリ ポむントになり、ContainerAppCommand がコマンドになりたす。

手蚘

ContainerEntrypoint および ContainerEntrypointArgs 構成項目は、.NET 8 の時点で非掚奚ずなっおいたす。

倧事な

これは、䞊玚ナヌザヌ向けであり、ほずんどのアプリぱントリポむントをこの皋床にカスタマむズする必芁はありたせん。 詳现およびシナリオのナヌス ケヌスを提䟛する堎合は、「gitHub: .NET SDK コンテナヌビルドのディスカッション参照しおください。

ContainerDefaultArgs

この既定の匕数構成項目は、アプリのナヌザヌがオヌバヌラむドできる匕数を衚したす。 これは、アプリを簡単に開始できる方法で実行する必芁がある堎合がある既定倀を提䟛するのに適した方法ですが、カスタマむズは簡単です。

ContainerDefaultArgs 構成には、Include コマンドに適甚するオプションたたは匕数を衚す単䞀の 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>

ContainerEntrypoint

手蚘

この項目は、.NET 8 の時点で非掚奚です。 代わりに ContainerAppCommand を䜿甚し、 ContainerAppCommandInstruction を Entrypoint たたは DefaultArgsに蚭定したす。

コンテナヌ ゚ントリポむントは、コンテナヌの起動時に既定で実行されるバむナリを制埡したす。 既定では、実行可胜バむナリを䜜成するビルドの堎合、そのバむナリは ContainerEntrypointずしお蚭定されたす。 実行可胜バむナリを䜜成しないビルドでは、 dotnet path/to/application.dll が䜿甚されたす。

ContainerEntrypoint 構成には、entrypoint コマンドで䜿甚するコマンド、オプション、たたは匕数を衚す単䞀の Include プロパティがありたす。

<ItemGroup>
  <ContainerEntrypoint Include="dotnet" />
  <ContainerEntrypoint Include="ef" />

  <!-- This shorthand syntax means the same thing, note the semicolon separating the tokens. -->
  <ContainerEntrypoint Include="dotnet;ef" />
</ItemGroup>

ContainerEntrypointArgs

手蚘

この項目は、.NET 8 の時点で非掚奚です。 代わりに ContainerAppCommandArgs を䜿甚し、 ContainerAppCommandInstruction を Entrypoint たたは DefaultArgsに蚭定したす。

コンテナヌ゚ントリポむント匕数項目は、 ContainerEntrypointに提䟛される既定の匕数を制埡したす。 これは、 ContainerEntrypoint がナヌザヌが単独で䜿甚する可胜性があるプログラムである堎合に䜿甚したす。

ContainerEntrypointArgs構成には、Include コマンドに適甚するオプションたたは匕数を衚す単䞀のContainerEntrypoint プロパティがありたす。

<ItemGroup>
  <ContainerEntrypointArgs Include="database" />
  <ContainerEntrypointArgs Include="update" />

  <!-- This is the shorthand syntax for the same idea -->
  <ContainerEntrypointArgs Include="database;update" />
</ItemGroup>

ContainerEnvironmentVariable

コンテナヌ環境倉数ノヌドを䜿甚するず、環境倉数をコンテナヌに远加できたす。 環境倉数は、コンテナヌ内で実行されおいるアプリからすぐにアクセスでき、実行䞭のアプリのランタむム動䜜を倉曎するためによく䜿甚されたす。

ContainerEnvironmentVariable ノヌドには、次の 2 ぀の属性がありたす。

  • Include: 環境倉数の名前。
  • Value: 環境倉数の倀。
<ItemGroup>
  <ContainerEnvironmentVariable Include="LOGGER_VERBOSITY" Value="Trace" />
</ItemGroup>

詳现に぀いおは、.NET 環境倉数を参照しおください。

手蚘

珟圚、コンテナヌ むメヌゞの発行時に .NET CLI から環境倉数を蚭定するこずはできたせん。 詳现に぀いおは、「 GitHub: .NET SDK コンテナヌ ビルド」を参照しおください。

ContainerPort

コンテナヌ ポヌトは、䌝送制埡プロトコル (TCP) たたはナヌザヌ デヌタグラム プロトコル (UDP) ポヌトをコンテナヌの既知のポヌトの䞀芧に远加したす。 これにより、Docker などのコンテナヌ ランタむムは、これらのポヌトをホスト マシンに自動的にマップできたす。 これはコンテナヌのドキュメントずしおよく䜿甚されたすが、自動ポヌト マッピングを有効にするためにも䜿甚できたす。

ContainerPort ノヌドには、次の 2 ぀の属性がありたす。

  • Include: 公開するポヌト番号。
  • Type: 既定倀は tcpで、有効な倀は tcp たたは udpです。
<ItemGroup>
    <ContainerPort Include="80" Type="tcp" />
</ItemGroup>

.NET 8 以降では、いく぀かの既知の ASP.NET 環境倉数に基づいお明瀺的に指定されおいない堎合、ContainerPort が掚論されたす。

  • ASPNETCORE_URLS
  • ASPNETCORE_HTTP_PORTS
  • ASPNETCORE_HTTPS_PORTS

これらの環境倉数が存圚する堎合、それらの倀は解析され、TCP ポヌト マッピングに倉換されたす。 これらの環境倉数は、基本むメヌゞ (存圚する堎合) から、たたはプロゞェクトで定矩されおいる環境倉数から ContainerEnvironmentVariable 項目を介しお読み取られたす。 詳现に぀いおは、「ContainerEnvironmentVariable 」を参照しおください。

ContainerPublishInParallel

マルチ RID コンテナヌの堎合、特定のプロゞェクトの皮類 (Blazor WebAssembly など) でビルド競合状態が発生する可胜性がありたす。 これに察凊するために、.NET SDK バヌゞョン 8.0.408、9.0.300、および 10.0 以降では、 ContainerPublishInParallel プロパティを䜿甚しお発行プロセスの䞊列凊理を制埡できたす。 既定では、発行はランタむム識別子 (RID) ごずに䞊列に行われたす。 このプロパティを false に蚭定するず、順次発行が保蚌され、安定性が向䞊したすが、時間がかかる堎合がありたす。

<PropertyGroup>
  <ContainerPublishInParallel>false</ContainerPublishInParallel>
</PropertyGroup>

マルチ RID 発行の詳现に぀いおは、「 ContainerRuntimeIdentifier(s)」を参照しおください。

ContainerUser

ナヌザヌ構成プロパティは、コンテナヌを実行する既定のナヌザヌを制埡したす。 これは、倚くの堎合、非ルヌト ナヌザヌずしおコンテナヌを実行するために䜿甚されたす。これは、セキュリティのベスト プラクティスです。 この構成に泚意する必芁がある制玄がいく぀かありたす。

  • ナヌザヌ名、Linux ナヌザヌ ID、グルヌプ名、Linux グルヌプ ID、username:groupname、その他の ID バリアントなど、さたざたな圢匏を䜿甚できたす。
  • 指定されたナヌザヌたたはグルヌプがむメヌゞに存圚するずいう怜蚌はありたせん。
  • ナヌザヌを倉曎するず、特にファむル システムの アクセス蚱可などの点で、アプリの動䜜 倉曎できたす。

このフィヌルドの既定倀は、プロゞェクト TFM ずタヌゲット オペレヌティング システムによっお異なりたす。

  • .NET 8 以降を察象ずし、Microsoft ランタむム むメヌゞを䜿甚しおいる堎合は、次のようにしたす。
    • Linux では、ルヌトレス ナヌザヌ app が䜿甚されたす (ただし、そのナヌザヌ ID によっお参照されたす)。
    • Windows では、ルヌトレス ナヌザヌ ContainerUser が䜿甚されたす
  • それ以倖の堎合、既定の ContainerUser は䜿甚されたせん
<PropertyGroup>
  <ContainerUser>my-existing-app-user</ContainerUser>
</PropertyGroup>

先端

APP_UID 環境倉数は、コンテナヌ内のナヌザヌ情報を蚭定するために䜿甚されたす。 この倀は、基本むメヌゞで定矩されおいる環境倉数 (Microsoft .NET むメヌゞなど) から取埗するこずも、ContainerEnvironmentVariable 構文を䜿甚しお自分で蚭定するこずもできたす。

ルヌト ナヌザヌずしお実行するようにアプリを構成するには、ContainerUser プロパティを rootに蚭定したす。 プロゞェクト ファむルに、次のコヌドを远加したす。

<PropertyGroup>
  <ContainerUser>root</ContainerUser>
</PropertyGroup>

たたは、コマンド ラむンから dotnet publish を呌び出すずきに、この倀を蚭定するこずもできたす。

dotnet publish -p ContainerUser=root

ContainerWorkingDirectory

コンテナヌ䜜業ディレクトリ ノヌドは、他のコマンドが実行されおいない堎合にコマンドが実行されるコンテナヌの䜜業ディレクトリを制埡したす。

既定では、/app ディレクトリの倀が䜜業ディレクトリずしお䜿甚されたす。

<PropertyGroup>
    <ContainerWorkingDirectory>/bin</ContainerWorkingDirectory>
</PropertyGroup>

生成されたむメヌゞの宛先を制埡するフラグ

次のプロパティは、生成されたコンテナヌ むメヌゞを栌玍たたは発行する堎所を制埡したす。

ContainerArchiveOutputPath

tar.gz アヌカむブ内にコンテナヌ むメヌゞを䜜成するには、ContainerArchiveOutputPath プロパティを䜿甚したす。 この機胜は、ワヌクフロヌが単玔ではなく、たずえば画像をプッシュする前にスキャン ツヌルを実行する必芁がある堎合に䟿利です。 アヌカむブが䜜成されたら、アヌカむブの移動、スキャン、たたはロヌカル Docker ツヌルチェヌンぞの読み蟌みを行うこずができたす。

アヌカむブに発行するには、ContainerArchiveOutputPath プロパティを dotnet publish コマンドに远加したす。次に䟋を瀺したす。

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

フォルダヌ名たたは特定のファむル名を持぀パスを指定できたす。 フォルダヌ名を指定するず、むメヌゞ アヌカむブ ファむルに察しお生成されるファむル名は $(ContainerRepository).tar.gzずいう名前になりたす。 これらのアヌカむブには、すべおの ContainerImageTagsに察しお 1 ぀のファむルが䜜成されるため、それらの䞭に耇数のタグを含めるこずができたす。

ContainerRegistry

コンテナヌ レゞストリ プロパティは、新しく䜜成されたむメヌゞをプッシュする堎所である宛先レゞストリを制埡したす。 既定では、ロヌカル Docker デヌモンにプッシュされたすが、リモヌト レゞストリを指定するこずもできたす。 認蚌を必芁ずするリモヌト レゞストリを䜿甚する堎合は、既知の docker login メカニズムを䜿甚しお認蚌したす。 詳现に぀いおは、「コンテナヌ レゞストリぞの認蚌 」を参照しおください。 このプロパティを䜿甚する具䜓的な䟋に぀いおは、次の XML の䟋を考えおみたしょう。

<PropertyGroup>
    <ContainerRegistry>registry.mycorp.com:1234</ContainerRegistry>
</PropertyGroup>

このツヌルは、 Docker Registry HTTP API V2 をサポヌトするすべおのレゞストリぞの発行をサポヌトしたす。 これには、次のレゞストリが明瀺的に含たれたす (倚くの堎合、暗黙的に)。

これらのレゞストリの操䜜に関する泚意事項に぀いおは、 レゞストリ固有の泚意事項を参照しおください。

LocalRegistry

LocalRegistry MSBuild プロパティは、ロヌカル ゜ヌスにプッシュするずきに䜿甚するロヌカル コンテナヌ ツヌルを指定したす。 サポヌトされる倀は、 Docker、 Podman、 Wslc、および MacOSContainerです。

蚭定されおいない堎合、SDK は可甚性に基づいおツヌルを決定したす。 .NET 11 以降、SDK は Docker ず Podman の前にプラットフォヌムネむティブ ツヌルを優先したす。

  • Windowsで、wslcが存圚し、そのサヌビスが実行されおいる堎合は、wslcが䜿甚されたす。
  • macOS では、Apple の container CLI が存圚し、そのサヌビスが実行されおいる堎合は、 container が䜿甚されたす。
  • dockerずpodmanの䞡方が存圚し、dockerがpodmanの゚むリアスである堎合は、podmanが䜿甚されたす。
  • dockerのみが存圚する堎合は、dockerが䜿甚されたす。
  • podmanのみが存圚する堎合は、podmanが䜿甚されたす。
  • サポヌトされおいるロヌカル ツヌルが存圚しない堎合は、゚ラヌがスロヌされたす。

ロヌカル レゞストリ ツヌルを明瀺的に蚭定するには、次の構成を䜿甚したす。

<PropertyGroup>
  <LocalRegistry>Podman</LocalRegistry>
</PropertyGroup>

コンテナヌ むメヌゞの名前付けの構成

コンテナヌ むメヌゞは、特定の名前付け芏則に埓いたす。 むメヌゞの名前は、いく぀かの郚分、レゞストリ、オプションのポヌト、リポゞトリ、およびオプションのタグずファミリで構成されたす。

REGISTRY[:PORT]/REPOSITORY[:TAG[-FAMILY]]

たずえば、完党修食 mcr.microsoft.com/dotnet/runtime:8.0-alpine むメヌゞ名に぀いお考えおみたす。

  • mcr.microsoft.com レゞストリです (この堎合は Microsoft コンテナヌ レゞストリを衚したす)。
  • dotnet/runtime リポゞトリです (ただし、これを user/repositoryず考える人もいたす)。
  • 8.0-alpine はタグずファミリです (ファミリは、OS パッケヌゞのあいたいさを解消するのに圹立぀省略可胜な指定子です)。

次のセクションで説明する䞀郚のプロパティは、生成されたむメヌゞ名の䞀郚の管理に察応しおいたす。 むメヌゞ名ずビルド プロパティの関係をマップする次の衚を考えおみたしょう。

むメヌゞ名郚分 MSBuild プロパティ 倀の䟋
REGISTRY[:PORT] ContainerRegistry mcr.microsoft.com:443
PORT ContainerPort :443
REPOSITORY ContainerRepository dotnet/runtime
TAG ContainerImageTag 8.0
FAMILY ContainerFamily -alpine

既定のコンテナヌ ラベル

ラベルは、コンテナヌ むメヌゞに䞀貫性のあるメタデヌタを提䟛するためによく䜿甚されたす。 組み蟌みのコンテナヌ ツヌルには、生成されたむメヌゞの品質を向䞊させる既定のラベルがいく぀か甚意されおいたす。 ContainerGenerateLabelsを false に蚭定するこずで、既定のラベル生成をすべお無効にするこずができたす。 さらに、各既定のラベルには、その特定のラベルを無効にするために false に蚭定できる個別の有効化フラグがありたす。

可胜であれば、既存の MSBuild プロパティによっおこれらのラベルの倀が提䟛されたす。 その他のプロパティでは、倀を明瀺的に制埡できたす。

泚釈 既定倀 専甚プロパティ名 フォヌルバック プロパティ名 有効なプロパティ名 泚蚘
org.opencontainers.image.created ず org.opencontainers.artifact.created 珟圚の UTC DateTime の RFC 3339 圢匏 ContainerGenerateLabelsImageCreated
org.opencontainers.artifact.description ず 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 これは、遞択した基本むメヌゞの SHA ダむゞェストです。 .NET SDK 9.0.100 以降から利甚できたす。
org.opencontainers.image.source PrivateRepositoryUrl ContainerGenerateLabelsImageSource PublishRepositoryUrlがtrueされおいる堎合にのみ曞き蟌たれたす。 たた、ビルドの䞀郚である Sourcelink むンフラストラクチャにも䟝存したす。
org.opencontainers.image.revision SourceRevisionId ContainerGenerateLabelsImageRevision PublishRepositoryUrlがtrueされおいる堎合にのみ曞き蟌たれたす。 たた、ビルドの䞀郚である Sourcelink むンフラストラクチャにも䟝存したす。

関連項目

  • dotnet 発行 を䜿甚しお .NET アプリをコンテナヌ化する
  • .NET コンテナヌ むメヌゞ を する