カスタム Sitecore イメージの作成

Current version: 10.1

このトピックでは、ソリューションからのビルド出力を他のアセットと一緒に、ベースの Sitecore ランタイム イメージにレイヤー化して、独自のカスタム Sitecore イメージを作成する方法について説明します。

次の図は、カスタムの Sitecore イメージがどのように作成されるかを示しています。

Sitecore のイメージとリポジトリ

このトピックでは、Docker のサンプル ソリューションを使用して、カスタムの Sitecore Experience Platform - Single (XP0) イメージを構築する方法について説明します。

このガイドでは、ソリューションをビルドする知識があり、ビルド アーティファクトが含まれている Docker ソリューション イメージを持っているか、従来の方法でビルド出力を利用できることを前提としています。

Docker サンプル リポジトリのクローンをコンピューター上のどこかに作成します (まだ作成していない場合)。このガイドでは、custom-images フォルダーを使用します。

ソリューションの構造を理解する

Docker を使った Sitecore 開発では、代表的なソリューションにdocker フォルダーという新しいフォルダーが導入されます。docker フォルダーには、Docker 開発をサポートするファイルとフォルダーが含まれています。このトピックでは、ビルドフォルダーを中心に説明します。custom-images\docker フォルダーに移動して、ここにある build フォルダーの内容を見てみましょう。

RequestResponseshell
build
    [service]
        Dockerfile
    ...

[service] の各フォルダーについて以下が該当します。

  • Sitecore の特定のトポロジーを構成するコンテナーを表します。この例では、Sitecore Experience Platform - Single (XP0) であるため、mssqlsolridcmxconnect などが該当します。

  • 少なくとも Dockerfile が含まれています。これは Sitecore ランタイムの Dockerfile です。

  • Docker Compose ファイル内の対応するサービスの Docker ビルド コンテキストとして使用されます。

Docker Examples リポジトリには、Sitecore のすべてのトポロジに関するサービスをカバーするビルド フォルダーが含まれています。

Sitecore ランタイム Dockerfile

Sitecore ランタイム イメージのカスタマイズされたバージョンを構築するには、Sitecore ランタイム Dockerfile を使用します。Sitecore トポロジを構成するコンテナーごとに Dockerfile を作成することをお勧めします。

この時点でカスタマイズを行っていない場合でも、Sitecore トポロジ内の各ロール (コンテナー) に対して Sitecore ランタイム Dockerfile を作成します。これは以下の理由で推奨されます。

  • ホット フィックスや将来のカスタマイズを行うための専用のレイヤーがある。

  • 結果として得られる画像には、ソリューションの必要に応じて、名前、タグ、ラベルを付けて保存できる。

ソリューションのビルド出力を使用した Dockerfile

ソリューションのビルド出力を Dockerfile で使用する方法を確認するには:

  • cm サービスの Dockerfile を開きます (C:\sitecore\docker-examples\custom-images\docker\build\cm\Dockerfile など)。これは、ソリューション イメージのビルド アーティファクトを使用した例です。

    • ビルド ステージの初期化

      複数のビルド ステージが初期化されます。

      RequestResponseshell
      ARG BASE_IMAGE
      ARG SXA_IMAGE
      ARG SPE_IMAGE
      ARG TOOLING_IMAGE
      ARG SOLUTION_IMAGE
      
      FROM ${SOLUTION_IMAGE} as solution
      FROM ${TOOLING_IMAGE} as tooling
      FROM ${SPE_IMAGE} as spe
      FROM ${SXA_IMAGE} as sxa
      FROM ${BASE_IMAGE}

      solutiontoolingspesxa の各イメージが取り込まれ、後で使用するために名前が付けられます (COPY の命令を使用します)。最後の部分では、渡された Sitecore の BASE_IMAGE (Docker Compose で設定) を使用してカスタム イメージを開始します。

    • 開発ツールの追加

      開発ツールは、tooling イメージから (C:\tools に) コピーされます。これらは、ローカル開発のための ENTRYPOINT を提供するとともに、後で変換を適用するために使用されます。

      RequestResponseshell
      COPY --from=tooling \tools\ \tools\
    • 作業ディレクトリの設定

      IIS イメージを使用しているため、ほとんどのカスタマイズは C:\inetpub\wwwroot 内で行われます。したがって、これを作業ディレクトリに設定します。

      RequestResponseshell
      WORKDIR C:\inetpub\wwwroot
    • Sitecore モジュールの追加

      Sitecore モジュールは、cm ロールに必要な命令に基づいて追加されます。詳細については、「Sitecore モジュールの追加」を参照してください。この例では、Sitecore PowerShell Extensions (SPE) と Sitecore Experience Accelerator (SXA) が含まれています。

      RequestResponseshell
      COPY --from=spe \module\cm\content .\
      COPY --from=sxa \module\cm\content .\
      COPY --from=sxa \module\tools \module\tools
      RUN C:\module\tools\Initialize-Content.ps1 -TargetPath .\; `
          Remove-Item -Path C:\module -Recurse -Force;
      注記

      ソリューションの命令の前にモジュールの命令を追加することをお勧めします。キャッシュを最適化するために、Dockerfile のベストプラクティスに従い、ビルド ステップの順序は変更が最も少ないものから最も多いものへの順とします。

    • ファイルの追加

      次に、solution のビルド イメージのファイルをコピーします。出力ファイルは \artifacts\website にあるサンプルのソリューション イメージに保存されています。

      RequestResponseshell
      COPY --from=solution \artifacts\website\ .\
    • 変換の追加

      cm サービスには、ソリューションとロールの両方の変換ファイルの例があります。詳細については、「設定変換の適用」を参照してください。

      まず、ソリューション変換をコピーします (出力された変換は、\artifacts\transforms\ にあるサンプルのソリューション イメージに保存されています)。次に、ロールの変換を行います。

      RequestResponseshell
      COPY --from=solution \artifacts\transforms\ \transforms\solution\
      COPY .\transforms\ \transforms\role\
    • 変換の適用

      最後に、ソリューションとロールの変換を Web ルートに適用します。

      RequestResponseshell
      RUN C:\tools\scripts\Invoke-XdtTransform.ps1 -Path .\ -XdtPath C:\transforms\solution\DockerExamples.Website
      RUN C:\tools\scripts\Invoke-XdtTransform.ps1 -Path .\ -XdtPath C:\transforms\role
    • アイテムの追加

      Sitecore アイテムのシリアル化のフレームワークや戦略によっては、これらに応じた追加の命令が cm Dockerfile でこの場所に挿入されることがあります。詳細については、アイテムの配置に関するトピックを参照してください。

空の Dockerfile

id サービスの Dockerfile を開きます。

RequestResponseshell
# escape=`

ARG BASE_IMAGE

FROM ${BASE_IMAGE}

これは、空の Dockerfile の例です。エスケープ命令と、さらに重要なのは、渡された Sitecore のBASE_IMAGE (Docker Compose で設定) を使用する必須の FROM 命令があるだけです。

Docker Compose で設定する

また、docker-compose.override.yml ファイルでカスタムの Sitecore ランタイム イメージのビルドを設定します。

注記

docker-compose.yml ファイルは、Sitecore に付属している、すぐに使用できる Docker Compose ファイルです。docker-compose.override.yml は、Sitecore イメージのカスタム ビルドや開発の目的に必要なオーバーライドや拡張機能により、メイン ファイルを拡張します。

cm サービスを設定するには:

  • custom-images フォルダーのルートにある docker-compose.override.yml ファイルを開きます。

    RequestResponseshell
    cm:
      image: ${REGISTRY}${COMPOSE_PROJECT_NAME}-xp0-cm:${VERSION:-latest}
      build:
        context: ./docker/build/cm
        args:
          BASE_IMAGE: ${SITECORE_DOCKER_REGISTRY}sitecore-xp0-cm:${SITECORE_VERSION}
          SPE_IMAGE: ${SITECORE_MODULE_REGISTRY}spe-assets:${SPE_VERSION}
          SXA_IMAGE: ${SITECORE_MODULE_REGISTRY}sxa-xp1-assets:${SXA_VERSION}
          TOOLING_IMAGE: ${SITECORE_TOOLS_REGISTRY}sitecore-docker-tools-assets:${TOOLS_VERSION}
          SOLUTION_IMAGE: ${REGISTRY}${COMPOSE_PROJECT_NAME}-solution:${VERSION:-latest}
      depends_on:
        - solution
      [...]

    いくつかの重要な注意点があります。

    • 変数の値 (${SITECORE_DOCKER_REGISTRY} など) は、環境ファイル (.env)、ローカル開発マシンのシステム環境変数、またはビルド サーバーのシークレットのいずれかから取得できます。

    • イメージ名には -xp0-cm サフィックスを付けます。デフォルトの変数値の場合、タグ付けされたバージョンは docker-examples-xp0-cm:latest となります。

    • build context./docker/build/cm に設定されています。Docker Compose は、ここにある Sitecore ランタイムの Dockerfile を使用します。

    • depends_onsolution サービスに設定して、最初に構築されるようにします。

残りの Sitecore ランタイム イメージも同様の方法で設定されます。一部のイメージには、entrypointvolumes など、追加のプロパティが設定されています。これらはイメージ ビルド プロセスでは使用されないため、このトピックでは説明していません。

従来のビルドの調整

ビルド Dockerfile はソリューションをビルドするための推奨される方法ですが、従来の方法を使用し、MSBuild をタスク ランナー、カスタム PowerShell スクリプト、またはその他のビルド ツールと組み合わせて使用する必要がある場合もあります。これは、主にレガシー コードベースやビルド プロセスの制限によるものです。

従来のビルドを調整するには:

  1. ビルド出力が、PowerShell などの方法により、それを必要とするdocker\build の各フォルダー (この例ではcm) に届くようにします。これは、ビルド アーティファクトが個々の Dockerfile のビルド コンテキストの一部となるために必要です。

  2. docker-compose.override.yml にある solution サービスと依存関係を削除します。

  3. Dockerfiles が solution イメージではなく、ローカルのビルド コンテキストから COPY になるように調整します。

Sitecore イメージの構築

Sitecore イメージを構築するには:

  1. Compose ファイルが含まれているフォルダーで PowerShell プロンプトを開きます。

  2. 次のコマンドを実行します。

    RequestResponseshell
    docker-compose build

    これにより、ソリューション イメージのビルド プロセスが開始され、定義されたすべてのカスタム Sitecore ランタイム イメージが開始されます。完了すると、カスタムの Sitecore ランタイム イメージが作成されます。

    RequestResponseshell
    Building solution
    [...]
    Successfully built baeb10e0ed5a
    Successfully tagged docker-examples-xp0-cm:latest
  3. すべての Docker イメージを一覧表示して、イメージが作成されたことを確認します。

    RequestResponseshell
    docker images docker-examples*
    RequestResponseshell
    REPOSITORY                                   TAG       IMAGE ID       CREATED          SIZE
    docker-examples-xp0-cm                       latest    59bf580e58b0   10 minutes ago   8.79GB
    docker-examples-xp0-xdbsearchworker          latest    861f52e6c9c5   11 minutes ago   7.71GB
    docker-examples-xp0-xdbautomationworker      latest    8a4c0958a121   11 minutes ago   7.69GB
    docker-examples-xp0-cortexprocessingworker   latest    d36565655830   11 minutes ago   7.68GB
    docker-examples-xp0-xconnect                 latest    88c8156afd30   11 minutes ago   8.13GB
    docker-examples-xp0-solr-init                latest    6fd0b5f9c96a   11 minutes ago   5.27GB
    docker-examples-solution                     latest    9d085019cbb7   11 minutes ago   252MB
    docker-examples-xp0-mssql                    latest    dd581e03bfd9   12 minutes ago   8.65GB
    docker-examples-id                           latest    979537c779c9   5 weeks ago      5.82GB

Do you have some feedback for us?

If you have suggestions for improving this article,