---
title: "Sitecore開発におけるコンテナ"
slug: "containers-in-sitecore-development"
abstract: "このトピックでは、Dockerの概要と、Sitecoreで開発する際のDockerの使い方について説明します。"
---
# Sitecore開発におけるコンテナ

このトピックでは、コンテナ、Docker、そしてSitecoreで開発する際のDockerの使い方について簡単に説明します。

## コンテナとは何ですか?

コンテナはコードがパッケージ化され、ライブラリや依存関係とともにソフトウェアの実行ユニットであり、開発者のワークステーション、オンプレミスサーバー、クラウド上など、どこでも実行でき、対象環境に関係なく簡単かつ一貫して展開できます。

アプリケーションのコンテナ化は、開発者がアプリケーションロジックや依存関係に注力し、デプロイチームが展開と管理に注力するため、関心事を明確に分離します。

コンテナ化の主な利点には以下のものがあります。

-   軽量で、ディスク上で小型で、オーバーヘッドも非常に低いです。
-   隔離 - コンテナはアプリケーション同士だけでなく、基盤となるシステムからも隔離します。固有の制約により、コンテナはデフォルトで安全です。
-   ポータビリティ - コンテナはそのコンテナのランタイム環境をサポートする任意のマシンで動作します。ローカルで構築でき、その後簡単にオンプレミスやクラウド環境へ移行できます。
-   ルーズカップリング - コンテナは非常に自給自足でカプセル化されているため、他のコンテナを壊さずに一つのコンテナを交換・アップグレードできます。
-   スケーラビリティ - コンテナは軽量で緩やかに結合されているため、新しいコンテナを作成することで迅速にスケールできます。

## コンテナと仮想マシンの違い

ハードウェアスタックを仮想化する代わりに、コンテナはオペレーティングシステムレベルで仮想化し、複数のコンテナがオペレーティングシステムのカーネル上に直接動作します。つまり、コンテナははるかに軽量化されているのです。カーネルを共有し、起動速度が速く、オペレーティングシステム全体を起動するのに比べてメモリの使用量もごく一部です。

![The difference between containers and virtual machines.](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/developer-tools/images/VMs-Containers.png)

より詳細な比較については、「 [コンテナと仮想マシン」](https://docs.microsoft.com/en-us/virtualization/windowscontainers/about/containers-vs-vm)を参照してください。

## Dockerとは何ですか?

コンテナは数年前に初めて登場しましたが、2013年にDockerが登場してから現代のコンテナ開発は加速しました。

Dockerはコンテナ上でアプリケーションを構築する [オープンソースプロジェクト](https://github.com/moby/moby) であると同時に、この技術を推進・進化させる [会社](https://www.docker.com/) でもあります。また、Dockerの公式レジストリであるDocker Hubも所有しています。Dockerはコンテナの代名詞となり、その普及に非常に成功しました。DockerはもともとLinux向けに作られましたが、現在はWindowsやMacOSでも動作しています。

Sitecoreでは、コンテナ技術は常にDockerです。

## 用語

Dockerやコンテナは特定の用語を使用しています。以下は、使われている用語の一部です:

-   イメージ - すべてのコードと依存関係を含むパッケージで、コンテナを作成するための設計図として機能します。画像はしばしば別のイメージに基づいており、追加のカスタマイズを加えています。画像は一度作成されると不変です。
-   Dockerfile - Dockerイメージの組み立て手順を含む [テキストドキュメント形式](https://docs.docker.com/engine/reference/builder/) です。このファイルは [、Docker CLIビルドコマンド](https://docs.docker.com/engine/reference/commandline/build/) によってイメージを構築するために使用されます。
-   レジストリ - イメージを保存する場所です。これは公開([Docker Hub](https://hub.docker.com/))かプライベート([Azure Container Registry](https://azure.microsoft.com/en-us/services/container-registry/))のいずれかです。レジストリは1つ以上のリポジトリを含みます。
-   リポジトリ - 同じ名前の画像の集合体で、バージョンやバリアントを示すタグ付きラベルが付いています。画像参照では、リポジトリは *mcr.microsoft.com/windows/servercore:ltsc2019* の最後のコロンの前の部分で、例えば *mcr.microsoft.com/windows/servercore* です。
-   タグ - リポジトリ内の特定の画像への参照。画像参照では、これは最後のコロンの後に位置し、バージョン番号やアーキテクチャのバリアント(例えば *mcr.microsoft.com/windows/servercore:ltsc2019* の*ltsc2019*)によく使われます。タグを指定しない場合、Dockerデフォルトでタグ名latest。
-   コンテナ - イメージのインスタンスです。Dockerイメージの内容、実行環境、標準命令セットで構成されています。
-   Compose - Dockerが作成した [CLIツール](https://docs.docker.com/compose/reference/overview/) および(YAMLベースの) [テキストドキュメント形式](https://docs.docker.com/compose/compose-file/) です。マルチコンテナアプリケーションの動作を定義するために使います。定義を作成した後、単一のコマンド(docker-compose up)でマルチコンテナアプリケーション全体をデプロイできます。このコマンドは画像ごとにコンテナを割り当てます。
-   Orchestrator - コンテナ管理ツールです。本番環境でのコンテナの展開と管理を支援します。 [Kubernetes](https://kubernetes.io/) が最も多く使われており、 [Azure Kubernetesサービス(AKS)](https://azure.microsoft.com/en-us/services/kubernetes-service/)を通じてMicrosoftからも十分にサポートされています。

## コンテナベースのSitecore開発

コンテナの使用がSitecoreの開発に魅力的である理由はいくつかあり、Sitecoreがマイクロサービスベースのアーキテクチャへと移行するにつれてさらに魅力的になります。コンテナはこのアーキテクチャに非常に適しており(むしろ促進しています)。

その他の理由は以下の通りです:

-   インストールなし - SIF(Sitecoreインストールフレームワーク)、SIM Sitecoreインスタンスマネージャーなどを使ったインストールなし。Sitecoreはすぐに使えるコンテナイメージを提供します。 docker-compose upでインスタンスを立ち上げることができ、コンテナイメージは自動的にダウンロードされます。
-   マルチプロジェクトの効率性 - SQLやSolrのバージョンの競合を気にせずに複数のSitecoreインスタンスを同時に動かせます。プロジェクト間を切り替える際に、インスタンス全体を素早く開始・停止できます。
-   簡素化されたオンボーディング - オンボーディングプロセスはシンプルです:前提条件をインストールし、コードリポジトリをクローンし、 docker-compose up実行。
-   環境の一貫性 - 環境の不整合による問題を排除する。ビルドをコンテナ化すれば、ビルド環境を完全にコントロールできます。
-   環境の安定性 - コンテナは不変なので、ローカルSitecoreインスタンスを壊す心配はありません。 docker-compose down と docker-compose up を使って再び稼働させましょう。

## Sitecore画像

バージョン10.0からは、すべての役割とトポロジーのコンテナイメージSitecore *scr.sitecore.com*、Sitecoreコンテナレジストリ(SCR)で利用可能になりました。

以前のSitecoreバージョンでは、[docker-imagesコミュニティリポジトリ](https://github.com/Sitecore/docker-images)を利用できます。これは画像を最初に構築する必要があるため手間がかかりますが、プロセスはスクリプト化され、よくドキュメント化されています。バージョン10.0以前のコンテナサポートについては [、このナレッジベースの記事](https://kb.sitecore.net/articles/161310) を参照してください。

## Sitecore Dockerリソース

コンテナドキュメントは以下のリソースを参照し、使用しています:

-   [Docker Examples](https://github.com/Sitecore/docker-examples) - コンテナ開発のための推奨構造を持つVisual Studioソリューションの例集リポジトリと、さまざまなトポロジーでSitecoreインスタンスを構築するためのDockerコンポジットファイル。
-   [Helix例](https://github.com/Sitecore/Helix.Examples) - 同じ [Sitecore Helix](https://helix.sitecore.net/)重視の例リポジトリで、Sitecore 10向けに更新され、Dockerコンテナが使われています。

## さらなる参考文献

Dockerドキュメント:

-   [https://docs.docker.com/engine/docker-overview/](https://docs.docker.com/engine/docker-overview/)
-   [https://docs.docker.com/get-started](https://docs.docker.com/get-started)

Microsoftドキュメント:

-   [https://docs.microsoft.com/en-us/dotnet/architecture/microservices/container-docker-introduction](https://docs.microsoft.com/en-us/dotnet/architecture/microservices/container-docker-introduction)
-   [https://docs.microsoft.com/en-us/virtualization/windowscontainers](https://docs.microsoft.com/en-us/virtualization/windowscontainers)

Dockerによる詳細なラボ:

-   [https://github.com/docker/labs/blob/master/windows/windows-containers](https://github.com/docker/labs/blob/master/windows/windows-containers)
-   [https://github.com/docker/labs/tree/master/windows/modernize-traditional-apps/modernize-aspnet](https://github.com/docker/labs/tree/master/windows/modernize-traditional-apps/modernize-aspnet)
-   [https://github.com/docker/labs/tree/master/dockercon-us-2017/windows-101](https://github.com/docker/labs/tree/master/dockercon-us-2017/windows-101)

Pluralsightには多くのDockerコンテンツがあります:

-   [https://www.pluralsight.com/courses/docker-windows-getting-started](https://www.pluralsight.com/courses/docker-windows-getting-started)
-   [https://www.pluralsight.com/courses/docker-web-development](https://www.pluralsight.com/courses/docker-web-development)