1. Sitecore Docker参考文献

Dockerfileのベスト プラクティスとシナリオ

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

このトピックでは、Dockerfileの記述のベスト プラクティスについて説明し、Sitecore開発にDockerを使用する場合の一般的なビルド シナリオをいくつか紹介します。

おすすめの方法

Dockerfileを作成するときは、Dockerビルド プロセスへの影響と、結果のイメージの両方を考慮してください。Dockerfileの構造が不十分な場合、ビルド時間が長くなったり、イメージ サイズが大きくなったりする可能性があります。Dockerfileを最適化するには、いくつかの方法があります。最適なガイドは、DockerとMicrosoftのものです。これらは両方とも研究する価値があります。

主なポイントとベストプラクティスは次のとおりです。

NuGetの復元の最適化

多くの場合、DockerfileでソリューションをビルドするときにNuGetの復元を行いますが、プロセスを最適化しないと、ビルド時間が長くなる可能性があります。

各ビルド ステップは、前のすべてのステップがキャッシュされている場合は結果をキャッシュし、ソース ファイルのハッシュが変更されていない場合はCOPYコマンドで結果をキャッシュします。そのため、NuGetの復元でコピーするファイルを選択して、キャッシュのバスティングを最小限に抑えることができます。

次に簡単な例を示します。

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS build

# Copy NuGet essentials and restore as distinct layers
COPY *.sln nuget.config .
COPY src\*.csproj .\src\
RUN nuget restore

# Copy everything else, build, etc
COPY src\. .\src\
RUN msbuild /p:Configuration=Release

[...]

この例は、次のように機能します。

  1. 必要なNuGetファイルがコピーされます。

  2. nuget restoreが実行され、これにより他のすべてが引き込まれます。

これにより、NuGetの復元手順がより頻繁にキャッシュされるため、毎回これらをダウンロードする必要がなくなります。

メモ

パッケージ参照に フローティング (*) またはバージョン範囲 (PackageReference形式でのみ使用可能) を使用すると、キャッシュされた復元レイヤーに古いパッケージバージョンが作成される可能性があります。正確なバージョンを使用する場合、これは問題ではありません。

これは、単純なフォルダ構造を持つ基本的なソリューションでは便利ですが、フォルダ構造が失われる原因となるCOPYコマンドのワイルドカード制限 のため、ほとんどのソリューション (Sitecore Helixなど) では実行できません。

これには回避策があります。これらのほとんどは、フォルダ構造とプロジェクトの命名について仮定しています。Sitecore例で一般的に使用される方法には、robocopyと共に別のprep ビルド ステージがあります (これにより、これらの仮定はすべて削除されます)。

FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS prep

# Gather only artifacts necessary for NuGet restore, retaining directory structure
COPY *.sln nuget.config \nuget\
COPY src\ \temp\
RUN Invoke-Expression 'robocopy C:\temp C:\nuget\src /s /ndl /njh /njs *.csproj *.scproj packages.config'

[...]

# New build stage, independent cache
FROM mcr.microsoft.com/dotnet/framework/sdk:4.8 AS build

# Copy prepped NuGet artifacts, and restore as distinct layer
COPY --from=prep .\nuget .\
RUN nuget restore

# Copy everything else, build, etc
COPY src\ .\src\
RUN msbuild /p:Configuration=Release

[...]

プライベートNuGetフィードの使用

ビルドでは、プライベート フィードからNuGetパッケージを取得する必要がある場合があります。Dockerコンテキストでビルドする際には、認証情報が確実に保護されるように、認証情報の管理について特別な考慮を払う必要があります。詳細については、次の記事を参照してください。

Sitecoreのチーム開発による構築

Team Development for Sitecore (TDS) を使用したDockerソリューション ビルドには、HedgehogDevelopment.TDS NuGetパッケージと、次に説明するようにTDSライセンス環境変数が必要です。

この例は Helixで見ることができます。GitHubの例リポジトリ。

この記事を改善するための提案がある場合は、 お知らせください!