---
title: "カスタムSitecore画像の作成"
slug: "building-custom-sitecore-images"
abstract: "カスタムSitecore画像の作成方法を説明しています。"
---
# カスタムSitecore画像の作成

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

以下の図はカスタムSitecore画像の作成方法を示しています:

![Sitecore images and repositories](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/developer-tools/images/custom-image.svg)

このトピックでは、Docker Examplesソリューションを使ってカスタムの*Sitecore Experience Platform - Single(XP0)* 画像を作成し、これを示しています。

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

まだやっていなければ、[Docker Examplesリポジトリ](https://github.com/Sitecore/docker-examples) をマシン内のどこかにクローンしてください。このガイドでは、*custom-images*フォルダを使用しています。

## 解の構造を理解する

Dockerを使ったSitecore開発では、典型的な解決策に新しいフォルダ、*Docker*フォルダが導入されます。 *docker*フォルダにはDocker開発をサポートするファイルやフォルダが含まれています。このトピックでは *ビルド* フォルダに焦点を当てます。 *custom-images\\docker*フォルダに移動し、*ビルド* フォルダの内容をこちらに確認してください:

build
 service
 Dockerfile
 ...

それぞれserviceフォルダー:

-   は与えられたSitecore位相を構成するコンテナを表します。この例では、 *Sitecore Experience Platform - 単一(XP0)*であり、 mssql、 solr、 id、 cm、 xconnect、 といったように続きます。
-   最低でも Dockerfileを含みます。これはSitecore実行時のDockerfileです。
-   Docker Composeファイル内の対応するサービスのDockerビルドコンテキストとして使用されます。

Docker Examplesリポジトリには *、すべての*Sitecoreトポロジーに対応するビルドフォルダが含まれています。

## Sitecore runtime Dockerfiles

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

カスタマイズがなくても、Sitecoreトポロジー内の各ロール(コンテナ)ごとにSitecoreランタイムのDockerfileを作成します。これが推奨される理由は以下の通りです:

-   ホットフィックスや将来のカスタマイズを行う専用レイヤーがあります。
-   自分で生成された画像があり、それに名前、タグ付け、ラベル付け、保存が可能で、ソリューションのニーズに応じて管理できます。

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

Dockerfileでソリューションビルド出力をどのように使うかを見るには:

-   *CM*サービスのDockerfileを開きます(例えばC:\\sitecore\\docker-examples\\custom-images\\docker\\build\\cm\\Dockerfile)。これはソリューションイメージのビルドアーティファクトを使う例です:
    -   **ビルド段階の初期化**
        
        複数のビルド段階は以下の通りにイニシャルされています:
        
        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}
        
        solution、tooling、spe、sxa画像を取り込み、後で使う名前を付けます(COPY指示付き)。最後の部分は、パスインSitecore BASE\_IMAGE(Docker Composeで設定)を使ってカスタム画像を始めます。
        
    -   **開発ツールの追加**
        
        開発ツールはtooling画像からコピーされます( C:\\tools)。 [ローカル開発のためのENTRYPOINTを提供する](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/deploying-files-into-running-containers.html "Deploying files into running containers")だけでなく、後で変換を適用するためにも使われます。
        
        COPY --from=tooling \\tools\\ \\tools\\
        
    -   **作業ディレクトリをセット**
        
        これはIISイメージを使用するため、ほとんどのカスタマイズはC:\\inetpub\\wwwroot内で行われます。したがって、これはワーキングディレクトリに設定されています:
        
        WORKDIR C:\\inetpub\\wwwroot
        
    -   **Sitecoreモジュールの追加**
        
        モジュールSitecore、*CM*役割に必要な指示に従って追加されます。 [Add Sitecore modules](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/add-sitecore-modules.html "Add Sitecore modules")にはさらに詳しい情報があります。この例にはSitecore PowerShell拡張(SPE)とSitecore Experience Accelerator(SXA)が含まれます:
        
        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:
        
        COPY --from=solution \\artifacts\\website\\ .\\
        
    -   **変換を追加する**
        
        *CM*サービスには、解変換ファイルと役割変換ファイルの例があります。設定[変換の適用](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/applying-configuration-transforms.html "Applying configuration transforms")にはより多くの情報があります。
        
        まず、解変換をコピーします(出力変換は \\artifacts\\transforms\\の解の例画像に保存されます)、その後役割変換を行います。
        
        COPY --from=solution \\artifacts\\transforms\\ \\transforms\\solution\\
        COPY .\\transforms\\ \\transforms\\role\\
        
    -   **変換を適用する**
        
        最後に、解と役割変換をウェブのルートに適用します:
        
        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のアイテムシリアライゼーションフレームワークや戦略によっては、*cmDockerfile*に追加の指示がある場合があります。詳細は [アイテム展開トピック](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/deploying-items.html "Deploying items") をご覧ください。
        

### Empty Dockerfile

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

# escape=\`

ARG BASE\_IMAGE

FROM ${BASE\_IMAGE}

これは空Dockerfileの例です。エ[スケープ指令](https://docs.docker.com/engine/reference/builder/#escape)と、より重要なのはパスイン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ファイルを開きます:
    
    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})から環境 [ファイル](https://docs.docker.com/compose/env-file/) (.env)、ローカル開発マシンのシステム環境変数、ビルドサーバーのシークレットのいずれかから取得できます。
    -   画像名には \-xp0-cm の接尾辞が使われます。デフォルトの変数値を使うと、タグ付けされたバージョンは docker-examples-xp0-cm:latest
    -   build contextは./docker/build/cmに設定されています。Docker ComposeはここにあるSitecoreランタイムDockerfileを使用しています。
    -   depends\_on は solution サービスに設定され、先にビルドされることを保証します。

その他のSitecoreランタイムイメージも同様の構成で設定されています。 entrypointやvolumesなど、いくつかの追加プロパティが設定されています。これらはイメージビルドプロセスでは使用されないため、本トピックでは説明しません。

## 伝統的なビルドのための調整

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

伝統的なビルドに合わせて調整するには:

1.  ビルド出力が、PowerShellや他の手段で必要な docker\\build フォルダ(この例では cm )に必ず届くようにしてください。これは、ビルドアーティファクトが個々のDockerfileのビルドコンテキストの一部となるようにするために必要です。
2.  docker-compose.override.ymlのsolutionサービスや依存関係を削除してください。
3.  DockerファイルをsolutionイメージではなくローカルビルドコンテキストからCOPYするように調整してください。

## Sitecore画像を構築

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

1.  Composeファイルが入っているフォルダでPowerShellプロンプトを開きます。
    
2.  次のコマンドを実行します:
    
    docker-compose build
    
    これによりソリューションイメージのビルドプロセスが開始され、その後すべてのカスタムSitecoreランタイムイメージが定義されます。カスタムSitecoreランタイムイメージは完成後に作成されます:
    
    Building solution
    ...
    Successfully built baeb10e0ed5a
    Successfully tagged docker-examples-xp0-cm:latest
    
3.  すべてのDockerイメージをリストアップして画像が作成されたことを確認します:
    
    docker images
    
    REPOSITORY TAG IMAGE ID CREATED SIZE
    docker-examples-xp0-cm latest baeb10e0ed5a 2 minutes ago 9.75GB
    docker-examples-xp0-solr latest a6cb09ff4658 2 minutes ago 5.19GB
    docker-examples-xp0-mssql latest a5d2c06253c4 2 minutes ago 6.62GB
    docker-examples-xp0-xconnect latest 54ecccb36ec5 2 minutes ago 8.4GB
    docker-examples-xp0-cortexprocessingworker latest cce1aa42f146 2 minutes ago 7.9GB
    docker-examples-xp0-xdbautomationworker latest 73a2d8707319 2 minutes ago 7.9GB
    docker-examples-xp0-xdbsearchworker latest 1b94f7eb2b49 2 minutes ago 7.92GB
    docker-examples-id latest d60b3e9c21f3 2 minutes ago 5.45GB
    docker-examples-solution latest 9bb20b2ab6db 7 minutes ago 259MB

## さらなる参考文献

-   [Dockerfile参照](https://docs.docker.com/engine/reference/builder/)
-   [Windows上のDockerfile](https://docs.microsoft.com/en-us/virtualization/windowscontainers/manage-docker/manage-windows-dockerfile)
-   [Dockerfileのベストプラクティスとシナリオ](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/dockerfile-best-practices-and-scenarios.html "Dockerfile best practices and scenarios")