How to Run Sitecore 10.3.x in Docker on Windows 10

> Configs for loading useful asset images
Cover Image for How to Run Sitecore 10.3.x in Docker on Windows 10

I wanted to load these asset images on Windows 10, but I didn't find any examples online:

  • sitecore-docker-tools-assets: general Sitecore container tools and utilities
  • sitecore-spe-assets: PowerShell automation via Sitecore PowerShell Extensions
  • sitecore-management-services-xm1-assets: management services

First start by getting the SXP Sitecore Container Deployment 10.3 from Github: https://github.com/Sitecore/container-deployment/releases/tag/10.3.1.009452.1563

In the .zip, you will find two folders: ltsc2019 and ltsc2022.

While the example files provided are good, there are a few more asset images that are worth loading: sitecore-docker-tools-assets, sitecore-spe-assets, and sitecore-management-services-xm1-assets.

Certain images, such as modules, are intended only as a source during your custom Sitecore image build and you never use them at runtime. These asset images are named accordingly with a -assets suffix.

Below is an incomplete .env file for reference:

.env

_10
REGISTRY=scr.sitecore.com/sxp/
_10
SITECORE_DOCKER_REGISTRY=scr.sitecore.com/sxp/
_10
SITECORE_MODULE_REGISTRY=scr.sitecore.com/sxp/modules/
_10
SITECORE_TOOLS_REGISTRY=scr.sitecore.com/tools/
_10
SITECORE_VERSION=10.3-ltsc2019
_10
EXTERNAL_IMAGE_TAG_SUFFIX=ltsc2019
_10
_10
TOOLS_VERSION=10.3.0-1809
_10
SPE_VERSION=6.4.0.65-1809
_10
MANAGEMENT_SERVICES_VERSION=5.2.113-1809

Now consume the environment variables in docker-compose.yml:

docker-compose.yml

_135
version: "2.4"
_135
_135
services:
_135
_135
traefik:
_135
command:
_135
- "--ping"
_135
- "--api.insecure=true"
_135
- "--providers.docker.endpoint=npipe:////./pipe/docker_engine"
_135
- "--providers.docker.exposedByDefault=false"
_135
- "--providers.file.directory=C:/etc/traefik/config/dynamic"
_135
- "--entryPoints.websecure.address=:443"
_135
- "--entryPoints.web.address=:80"
_135
ports:
_135
- "8080:80"
_135
volumes:
_135
- source: \\.\pipe\docker_engine
_135
target: \\.\pipe\docker_engine
_135
type: npipe
_135
- ./traefik:C:/etc/traefik
_135
depends_on:
_135
id:
_135
condition: service_healthy
_135
cm:
_135
condition: service_healthy
_135
_135
mssql:
_135
mem_limit: ${MEM_LIMIT_SQL:-2GB}
_135
volumes:
_135
- .\data\mssql:c:\data
_135
restart: unless-stopped
_135
_135
mssql-init:
_135
image: ${REGISTRY}${COMPOSE_PROJECT_NAME}-xp1-mssql-init:${VERSION:-latest}
_135
build:
_135
context: ./build/mssql-init
_135
args:
_135
BASE_IMAGE: ${SITECORE_DOCKER_REGISTRY}sitecore-xp1-mssql-init:${SITECORE_VERSION}
_135
SPE_IMAGE: ${SITECORE_MODULE_REGISTRY}sitecore-spe-assets:${SPE_VERSION}
_135
_135
solr:
_135
volumes:
_135
- .\data\solr:c:\data
_135
_135
solr-init:
_135
image: sxp/sitecore-xp1-solr-init:10.3.2-ltsc2019
_135
build:
_135
context: ./build/solr-init
_135
args:
_135
BASE_IMAGE: ${SITECORE_DOCKER_REGISTRY}sitecore-xp1-solr-init:${SITECORE_VERSION}
_135
_135
cm:
_135
image: ${REGISTRY}${COMPOSE_PROJECT_NAME}-xp0-cm:${SITECORE_VERSION}
_135
build:
_135
context: ./build/cm
_135
args:
_135
BASE_IMAGE: ${SITECORE_DOCKER_REGISTRY}sitecore-xp0-cm:${SITECORE_VERSION}
_135
TOOLING_IMAGE: ${SITECORE_TOOLS_REGISTRY}sitecore-docker-tools-assets:${TOOLS_VERSION}
_135
SPE_IMAGE: ${SITECORE_MODULE_REGISTRY}sitecore-spe-assets:${SPE_VERSION}
_135
MANAGEMENT_SERVICES_IMAGE: ${SITECORE_MODULE_REGISTRY}sitecore-management-services-xm1-assets:${MANAGEMENT_SERVICES_VERSION}
_135
environment:
_135
SITECORE_LICENSE_LOCATION: C:\license\license.xml
_135
volumes:
_135
- .\data\cm\website:C:\deploy
_135
- .\serialization:C:\serialization
_135
- .\data\cm\logs:C:\inetpub\wwwroot\App_Data\logs
_135
- .\data\cm\LmapProcessFiles:C:\inetpub\wwwroot\App_Data\LmapProcessFiles
_135
- ${LICENSE_PATH}:C:\license
_135
entrypoint: powershell -Command "& C:\\tools\\entrypoints\\iis\\Development.ps1"
_135
mem_limit: ${MEM_LIMIT_CM:-4GB}
_135
restart: unless-stopped
_135
labels:
_135
- "traefik.http.middlewares.redirect-to-https.redirectScheme.scheme=https"
_135
- "traefik.http.routers.cm.entrypoints=web"
_135
- "traefik.http.routers.cm.middlewares=redirect-to-https"
_135
_135
cd:
_135
image: ${REGISTRY}${COMPOSE_PROJECT_NAME}-xp0-cd:${SITECORE_VERSION}
_135
build:
_135
context: ./build/cd
_135
args:
_135
BASE_IMAGE: ${SITECORE_DOCKER_REGISTRY}sitecore-xp1-cd:${SITECORE_VERSION}
_135
TOOLING_IMAGE: ${SITECORE_TOOLS_REGISTRY}sitecore-docker-tools-assets:${TOOLS_VERSION}
_135
environment:
_135
SITECORE_LICENSE_LOCATION: C:\license\license.xml
_135
volumes:
_135
- .\data\cd\website:C:\deploy
_135
- .\data\cd\logs:C:\inetpub\wwwroot\App_Data\logs
_135
- ${LICENSE_PATH}:C:\license
_135
entrypoint: powershell -Command "& C:\\tools\\entrypoints\\iis\\Development.ps1"
_135
mem_limit: ${MEM_LIMIT_CM:-4GB}
_135
restart: unless-stopped
_135
labels:
_135
- "traefik.http.middlewares.redirect-to-https.redirectScheme.scheme=https"
_135
- "traefik.http.routers.cd.entrypoints=web"
_135
- "traefik.http.routers.cd.rule=Host(`${CD_HOST}`) || Host(`asm-${CD_HOST}`) "
_135
- "traefik.http.routers.cd.middlewares=redirect-to-https"
_135
_135
id:
_135
environment:
_135
SITECORE_LICENSE_LOCATION: C:\license\license.xml
_135
volumes:
_135
- ${LICENSE_PATH}:C:\license
_135
_135
xconnect:
_135
image: ${REGISTRY}${COMPOSE_PROJECT_NAME}-xp0-xconnect:${SITECORE_VERSION}
_135
build:
_135
context: ./build/xconnect
_135
args:
_135
BASE_IMAGE: ${SITECORE_DOCKER_REGISTRY}sitecore-xp0-xconnect:${SITECORE_VERSION}
_135
TOOLING_IMAGE: ${SITECORE_TOOLS_REGISTRY}sitecore-docker-tools-assets:${TOOLS_VERSION}
_135
environment:
_135
SITECORE_LICENSE_LOCATION: C:\license
_135
volumes:
_135
- .\data\xconnect:C:\deploy
_135
- ${LICENSE_PATH}:C:\license
_135
entrypoint: powershell -Command "& C:\\tools\\entrypoints\\iis\\Development.ps1"
_135
_135
xdbsearchworker:
_135
environment:
_135
SITECORE_LICENSE_LOCATION: C:\license
_135
volumes:
_135
- ${LICENSE_PATH}:C:\license
_135
_135
xdbautomationworker:
_135
environment:
_135
SITECORE_LICENSE_LOCATION: C:\license
_135
volumes:
_135
- ${LICENSE_PATH}:C:\license
_135
_135
cortexprocessingworker:
_135
environment:
_135
SITECORE_LICENSE_LOCATION: C:\license
_135
volumes:
_135
- ${LICENSE_PATH}:C:\license

Here is a useful resource which provides a comprehensive list of Sitecore Docker image tags:

https://raw.githubusercontent.com/Sitecore/docker-images/master/tags/sitecore-tags.md

May the container gods have mercy on your soul.

-MG


More Stories

Cover Image for Tips for Forms Implementations

Tips for Forms Implementations

> And other pro tips

Cover Image for Tips for Applying Cumulative Sitecore XM/XP Patches and Hotfixes

Tips for Applying Cumulative Sitecore XM/XP Patches and Hotfixes

> It's probably time to overhaul your processes

Cover Image for Security Series: App Service IP Restrictions

Security Series: App Service IP Restrictions

> How to manage IP rules "at scale" using the Azure CLI

Cover Image for Critical Security Bulletin SC2024-001-619349 Announced

Critical Security Bulletin SC2024-001-619349 Announced

> And other scintillating commentary

Cover Image for On Sitecore Stack Exchange (SSE)

On Sitecore Stack Exchange (SSE)

> What I've learned, what I see, what I want to see

Cover Image for Troubleshooting 502 Responses in Azure App Services

Troubleshooting 502 Responses in Azure App Services

> App Services don't support all libraries

Cover Image for NextJS: Short URL for Viewing Layout Service Response

NextJS: Short URL for Viewing Layout Service Response

> Because the default URL is 2long4me

Cover Image for On Sitecore Development

On Sitecore Development

> Broadly speaking

Cover Image for How to Run Old Versions of Solr in a Docker Container

How to Run Old Versions of Solr in a Docker Container

> Please don't make me install another version of Solr on my local...

Cover Image for Hello World

Hello World

> Welcome to the show

Cover Image for Tips for New Sitecore Developers

Tips for New Sitecore Developers

> If I had more time, I would have written a shorter letter

Cover Image for Year in Review: 2022

Year in Review: 2022

> Full steam ahead

Cover Image for NextJS: Access has been blocked by CORS policy

NextJS: Access has been blocked by CORS policy

> CORS is almost as much of a nuisance as GDPR popups

Cover Image for On Mentorship and Community Contributions

On Mentorship and Community Contributions

> Reflections and what I learned as an MVP mentor

Cover Image for Don't Ignore the HttpRequestValidationException

Don't Ignore the HttpRequestValidationException

> Doing so could be... potentially dangerous

Cover Image for Ideas For Docker up.ps1 Scripts

Ideas For Docker up.ps1 Scripts

> Because Docker can be brittle

Cover Image for Content Editor Search Bar Not Working

Content Editor Search Bar Not Working

> Sometimes it works, sometimes not

Cover Image for Early Returns in React Components

Early Returns in React Components

> When and how should you return early in a React component?

Cover Image for Script: Boost SIF Certificate Expiry Days

Script: Boost SIF Certificate Expiry Days

> One simple script that definitely won't delete your system32 folder

Cover Image for NextJS/JSS Edit Frames Before JSS v21.1.0

NextJS/JSS Edit Frames Before JSS v21.1.0

> It is possible. We have the technology.

Cover Image for JSS + TypeScript Sitecore Project Tips

JSS + TypeScript Sitecore Project Tips

> New tech, new challenges

Cover Image for Azure PaaS Cache Optimization

Azure PaaS Cache Optimization

> App Services benefit greatly from proper configuration

Cover Image for Super Fast Project Builds with Visual Studio Publish

Super Fast Project Builds with Visual Studio Publish

> For when solution builds take too long

Cover Image for Sitecore Symposium 2022

Sitecore Symposium 2022

> What I'm Watching 👀

Cover Image for Symposium 2022 Reflections

Symposium 2022 Reflections

> Sitecore is making big changes

Cover Image for NextJS: Unable to Verify the First Certificate

NextJS: Unable to Verify the First Certificate

> UNABLE_TO_VERIFY_LEAF_SIGNATURE

Cover Image for JSS: Reducing Bloat in Multilist Field Serialization

JSS: Reducing Bloat in Multilist Field Serialization

> Because: performance, security, and error-avoidance

Cover Image for SPE Script Performance & Troubleshooting

SPE Script Performance & Troubleshooting

> Script never ends or runs too slow? Get in here.

Cover Image for Add TypeScript Type Checks to RouteData fields

Add TypeScript Type Checks to RouteData fields

> Inspired by error: Conversion of type may be a mistake because neither type sufficiently overlaps with the other.