---
title: "実行中のコンテナへのファイル展開"
slug: "deploying-files-into-running-containers"
abstract: "ランニングコンテナにファイルをデプロイする方法を説明しています。"
---
# 実行中のコンテナへのファイル展開

このトピックでは、Visual Studioからローカルで実行するコンテナに直接ファイルをデプロイできるように、Sitecoreソリューションをどのように構成するかを説明します。開発中にこの方法を使って効率的なフィードバックループを確保し、毎回カスタムSitecore画像を作り直すのではなく、

以下の図は展開プロセスの概要です:

![A diagram that shows the deployment process.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/developer-tools/images/file-deployment.svg)

## Docker Examplesリポジトリをクローンする

まだ行っていなければ、[Docker Exampleリポジトリ](https://github.com/Sitecore/docker-examples) をマシン上の場所(例えばC:\\sitecore\\docker-examples\\)にクローンしてください。本トピックでは、*custom-images*フォルダを例として使います。

## 例の準備

*カスタムイメージ*の例は実行前に準備が必要です。まだ準備をしていない場合は、準備[手順](https://doc.sitecore.com/xp/ja/developers/103/developer-tools/run-your-first-sitecore-instance.html "Run your first Sitecore instance")に従うか、付属のinit.ps1スクリプトを実行して自動的にこれらの準備手順を実行してください。

-   PowerShell管理者プロンプトを開き、*custom-images*フォルダ(例: C:\\sitecore\\docker-examples\\custom-images)に移動します。 \-LicenseXmlPathパラメータでSitecoreライセンスファイルの場所を指定する次のコマンドを実行します。
    
    .\\init.ps1 -LicenseXmlPath C:\\License\\license.xml
    

## 開発用ENTRYPOINTスクリプトとは何ですか?

ENTRYPOINTはコンテナが最初に実行されたときに実行するコマンドを提供します。すべてのSitecoreランタイムイメージにはDockerfile命令の一部としてデフォルト設定ENTRYPOINTが設定されているため、画像は実行の準備ができています。docker inspectコマンドで任意の画像のデフォルトENTRYPOINTを見つけられます。

## なぜ開発用のスクリプトが違うのか?

典型的なSitecoreの開発ワークフローには、複数回の反復でコード変更を行い、実行中のSitecoreインスタンスのウェブルートに対してソリューションを構築することが含まれます。現在の[Docker for Windowsの制限](https://docs.docker.com/engine/reference/builder/#notes-about-specifying-volumes)により、コンテナ内のボリュームの宛先は存在しない、または空のディレクトリでなければなりません。マウントされたボリュームを持つDockerコンテナでは現時点では実現できません。

回避策としては、別のマウントされた *ホット* フォルダで変更を監視し、それらの変更をSitecoreウェブルートにコピーすることです。このウォッチ処理が起動時に開始されるようにするために、デフォルトのSitecore本ENTRYPOINTを上書きできます。

このウォッチプロセスと補助的なENTRYPOINTの組み合わせが *、sitecore-docker-tools-assets*イメージに含まれるものです。

## sitecore-docker-tools-assetsイメージ開発ENTRYPOINT

画像構築プロセスを助ける他のスクリプトに加え、*sitecore-docker-tools-assets*イメージには以下のスクリプトが含まれています:

-   脚本をご覧ください:
    
    C:\\tools\\scripts\\Watch-Directory.ps1: はソースパスのファイル変更を監視し、それに応じて宛先パスを更新します。
    
-   ENTRYPOINTスクリプト:
    
    -   C:\\tools\\entrypoints\\iis\\Development.ps1IISベースの役割(例:*CM*、*CD*、*xconnect*)で使用するための開発ENTRYPOINTスクリプトです。
    -   C:\\tools\\entrypoints\\worker\\Development.ps1:.NETコアベースのワーカーロール(例:*xdbsearchworker*、*xdbautomationworker*、*cortexprocessingworker*)で使用する開発ENTRYPOINTスクリプトです。

*Development.ps1*の各スクリプトは同じように動作します:

-   ディレクトリがC:\\deployにマウントされている場合、ウォッチプロセス(Watch-Directory.ps1)をバックグラウンドジョブとして開始します。
-   彼らはデフォルトSitecore ENTRYPOINTと呼びます。

> !注C:\\deployはデフォルトのソースディレクトリですが、これを上書きすることもできます。ウォッチスクリプトのパラメータをカスタマイズして、異なるソースパスと宛先パスを使い、追加のファイルやフォルダを除外することも可能です。

## 解の構造を理解する

Dockerを用いたSitecore開発では、典型的なソリューションに新しいフォルダ「 *docker* folder」が導入されます。 *docker*フォルダにはDocker開発をサポートするファイルやフォルダが含まれています。

*custom-images\\docker*フォルダの構造は以下の通りです:

deploy
 environment
 ...

environmentフォルダーそれぞれの役割は以下の通りです:

-   コード展開の *目的地* 。
-   脚本の開発ENTRYPOINT*情報*源です。

この場合、*ウェブサイト* フォルダはSitecoreのウェブサイト/プラットフォームコンテナ(*cm*、*cd*など)を担当し、*xconnect*フォルダはSitecoreのxConnectコンテナ( *xconnect*など)を担当します。

## Docker Examples環境プロジェクト

Docker Examplesリポジトリには、ファイル展開シナリオを示す2つのプロジェクトがあります。 *custom-images*フォルダにアクセスし、Visual Studioのソリューション*DockerExamples.sln*を開きます:

-   *DockerExamples.Website*:ウェブサイトやプラットフォームの成果物の構築と公開を容易にし、デフォルトの Sample Inner Sublayout.ascx サブレイアウトへの簡単な変更を含みます。
-   *DockerExamples.XConnect*:xConnect アーティファクトのビルドと公開を促進します。

[Helixソリューション](https://helix.sitecore.net/)では、*DockerExamples.Website*と*DockerExamples.XConnect*のプロジェクトは、しばしば別々の環境モジュールと1つ以上のプロジェクト/機能モジュールに分割されますが、ここではシンプルさを図るためにまとめています。

これらのプロジェクトそれぞれには**DockerDeploy**の公開プロファイルがあります:

![How to select a profile in a Visual Studio solution.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/developer-tools/images/VS-DockerDeploy.png)

各プロファイルのDockerDeploy.pubxmlファイルを開くと、対応する*docker\\deploy*環境サブフォルダに公開するように設定されているのがわかります: **DockerExamples.Website** *to docker\\deploy\\website* 、**DockerExamples.XConnect** to *docker\\deploy\\xconnect*。

### ファイル展開オプション

Docker Examplesソリューションは、基本的なVisual Studioファイルパブリッシュを使ったシンプルな例です。実際のソリューションでは、[Team Development for Sitecore(TDS)](https://www.teamdevelopmentforsitecore.com/)に含まれるより堅牢な展開メカニズム、Helix Publishing Pipeline(HPP)、または独自のカスタムアプローチを使うことができます。

しかし最終的な目的は同じで、ファイルを適切な*docker\\deploy* environmentサブフォルダに移動させることです。

これは、Sitecoreの開発ベストプラクティスであるウェブルートへのデプロイに似ていますが、ファイルを直接ウェブルートに送るのではなく*docker\\deploy*に送る方法です。

## Sitecoreのランタイムイメージに適用

Sitecoreイメージでランタイムファイルのデプロイを有効にするには:

1.  *CM*サービスのSitecoreランタイムDockerfileを開きます。最初にTOOLING\_IMAGEがARG(Docker Composeで設定済み)で導入され、名前付きビルドステージとして開始されるのがわかりますtooling:
    
    ARG TOOLING\_IMAGE
    ...
    FROM ${TOOLING\_IMAGE} as tooling
    
    toolsフォルダ(ENTRYPOINTスクリプトを含む)はtooling画像からコピーされてC:\\tools:
    
    COPY --from=tooling \\tools\\ \\tools\\
    
2.  *xconnect*サービスのSitecoreランタイムDockerfileを開くと、同じ手順がこちらに示されています。これらは*XP1*トポロジーや*XM1*トポロジーで使えるように、*cd* SitecoreランタイムDockerfileにも含まれています。
    

これがSitecoreのランタイムDockerfileに必要なすべてです。

> !重要ENTRYPOINTスクリプトとウォッチスクリプトがイメージにコピーされ、実行時に利用可能であることが重要です。

Docker Composeで設定するには:

1.  *custom-images*フォルダのルートにあるdocker-compose.override.ymlファイルを開きます(例:C:\\sitecore\\docker-examples\\custom-images\\docker-compose.override.yml)。
    
    以下の例はcmサービスの構成方法を示しています:
    
    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}
     ...
     volumes:
     - ${LOCAL\_DEPLOY\_PATH}\\website:C:\\deploy
     ...
     entrypoint: powershell -Command "& C:\\tools\\entrypoints\\iis\\Development.ps1"
    
    以下は構成の説明です。
    
    -   TOOLING\_IMAGEビルドARGはsitecore-docker-tools-assetsイメージリポジトリを使用するように設定されています。特定のイメージタグやバージョンは[、環境ファイル](https://docs.docker.com/compose/env-file/)(.env)で定義されているTOOLS\_VERSION変数によって決まります。
    -   また、.envファイルでは、*LOCAL\_DEPLOY\_PATHがdocker\\deploy*フォルダの相対パスに設定されています。
    -   この変数は、*docker\\deploy* website environmentサブフォルダ(.\\docker\\deploy\\website)を、デフォルトのwatch scriptソースフォルダ(C:\\deploy)の実行中のコンテナにDockerボリュームで公開するために使われ[ます。](https://docs.docker.com/compose/compose-file/#volumes)
    -   デフォルトの [エントリーポイント](https://docs.docker.com/compose/compose-file/#entrypoint) は上書きされ、開発 ENTRYPOINT スクリプトに設定されます。
2.  xconnectサービスも同様の構成で設定されています。ただし、C:\\deployボリュームマウントは*docker\\deploy* xconnect environmentサブフォルダにマッピングされます。
    
    xconnect:
     ...
     volumes:
     - ${LOCAL\_DEPLOY\_PATH}\\xconnect:C:\\deploy
     ...
    
    このセットアップが完了すると、実行中のSitecore Dockerインスタンス内のウェブサイト/プラットフォームまたはxConnectコンテナにソリューション資産を独立して公開できます。
    

## Docker Examplesを実行する

Dockerの例を実行するには:

1.  PowerShellプロンプトを開き、*custom-images*フォルダに移動し、Docker Compose upコマンドでDocker例を実行します:
    
    docker-compose up -d
    
2.  インスタンスが稼働したら、[https://cm.dockerexamples.localhost](https://cm.dockerexamples.localhost)にブラウズしてください。お馴染みのSitecoreデフォルトページにDockerロゴが追加されました:
    
    ![The standard Sitecore first page.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/developer-tools/images/Docker-Examples-Homepage.png)
    
    ロゴは*DockerExamples.Website*プロジェクトのSample Inner Sublayout.ascxサブレイアウトに追加されます。
    
3.  Visual StudioでSample Inner Sublayout.ascxファイルを開いて変更を加えてください。例えば、Dockerロゴの下に新しい段落を追加するといった例があります。
    
    <%@ Control Language="c#" AutoEventWireup="true" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
    <div id="InnerCenter">
     <div id="Header">
     <img src="https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/developer-tools/-/media/Default%20Website/sc/_logo.ashx" alt="Sitecore" id="scLogo" />
     <p style="margin: 0 16px; font-size: 30px;">+</p>
     <img src="https://doc.sitecore.com/images/docker-logo.png" alt="Docker" />
     <p><strong>= Awesome!</strong></p>
     </div>
     <div id="Content">
     <div id="LeftContent">
     <sc:placeholder runat="server" key="content" />
     </div>
     </div>
     <div id="Footer"><hr class="divider"/>© <%= Sitecore.DateUtil.ToServerTime(DateTime.UtcNow).Year.ToString()%> Sitecore</div>
    </div>
    
4.  *DockerExamples*を公開します*。DockerDeploy*の公開プロファイルを使用したウェブサイトプロジェクト(*DockerExamples*を右クリックしてください*。)。Solution Explorerのウェブサイト*プロジェクトを使い、「**公開**」をクリックします。
    
    > !注これにより、*docker\\deploy* websiteフォルダにファイルを公開されます。これにより、*cmコンテナの* ウェブルートにコピーするウォッチスクリプトがトリガーされます。
    
5.  公開が完了したら、ブラウザで[https://cm.dockerexamples.localhost](https://cm.dockerexamples.localhost)ページを更新すると、変更点を確認できます。
    
    ![The Sitecore home page showing the change you made.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/developer-tools/images/Docker-Examples-Homepage-Modified.png)
    
6.  downコマンドを使ってコンテナを停止し、取り外します:
    
    docker-compose down
## デプロイフォルダを整理してください

*mssql*や*solr*のデータフォルダと同様に、*dockerやデプロイ*フォルダのファイルは1docker-compose down後も残ります。これらのフォルダ内のファイルを削除するには、付属のclean.ps1スクリプトを使ってください。

デプロイフォルダの整理:

-   *custom-images*フォルダに移動し、PowerShell管理者プロンプトでスクリプトを実行します:
    
    .\\docker\\clean.ps1