---
title: "Spin Up a Kanoa MES Dev Environment in Minutes: Introducing the Kanoa Docker Template"
description: Kanoa’s public Docker template provides a reproducible local development environment for Ignition, the Kanoa MES technical components, and SQL Server.
image: https://kanoa.ai/hubfs/Kanoa%20Blog%20-%20shipping%20containers%20on%20a%20dock.png
---

[![primary_logo_white](https://kanoa.ai/hs-fs/hubfs/primary_logo_white.png?width=167&height=36&name=primary_logo_white.png "primary_logo_white")](https://kanoa.ai/)

[![kanoa](https://kanoa.ai/hs-fs/hubfs/primary_logo.png?width=177&height=50&name=primary_logo.png "kanoa")](https://kanoa.ai/)

- Kanoa MES
    - [Kanoa MES Platform](https://kanoa.ai/kanoa-mes-overview)
    - [Kanoa Ops](https://kanoa.ai/kanoa-ops)
    - [Kanoa Trace](https://kanoa.ai/kanoa-trace)
    - [Kanoa Quality](https://kanoa.ai/kanoa-quality)
    - [Kanoa Maintenance](https://kanoa.ai/kanoa-maintenance)
    - [Kanoa Inventory](https://kanoa.ai/kanoa-inventory)
    - [Implementation Assurance](https://kanoa.ai/implementation-assurance-expert-guidance-for-successful-mes-kanoa)
    - [Powered by Ignition](https://kanoa.ai/powered-by-ignition)
    - [Frequently Asked Questions](https://kanoa.ai/faq)
- [Pricing](https://kanoa.ai/pricing)
- Resources
    - [Live Demo](http://demo.kanoa.ai/data/perspective/client/kanoaDemo/)
    - [Downloads](https://kanoa.ai/downloads)
    - [Blog](https://kanoa.ai/kanoa-blog)
    - [Partners](https://kanoa.ai/become-a-kanoa-partner)
          - [Systems Integrators](https://kanoa.ai/systems-integrator-partners)
          - [Friends of Kanoa](https://kanoa.ai/partners)
          - [Become a Partner](https://kanoa.ai/become-a-kanoa-partner)
    - [Kanoa on YouTube](https://www.youtube.com/@kanoa_ai)
    - [About](https://kanoa.ai/about)
- Support
    - [Documentation](https://docs.kanoa.ai/)
    - [Support Portal](https://kanoa.freshdesk.com/support/login)
    - [Support Policy](https://kanoa.ai/hubfs/Documents/Kanoa%20Support%20Policy%2020240618.pdf)
- [Contact](https://kanoa.ai/contact)

More results

 Download Kanoa

 Download Kanoa

- Kanoa MES
  
  
  
  
  
  
  
  
  
    - [Kanoa MES Platform](https://kanoa.ai/kanoa-mes-overview)
    - [Kanoa Ops](https://kanoa.ai/kanoa-ops)
    - [Kanoa Trace](https://kanoa.ai/kanoa-trace)
    - [Kanoa Quality](https://kanoa.ai/kanoa-quality)
    - [Kanoa Maintenance](https://kanoa.ai/kanoa-maintenance)
    - [Kanoa Inventory](https://kanoa.ai/kanoa-inventory)
    - [Implementation Assurance](https://kanoa.ai/implementation-assurance-expert-guidance-for-successful-mes-kanoa)
    - [Powered by Ignition](https://kanoa.ai/powered-by-ignition)
    - [Frequently Asked Questions](https://kanoa.ai/faq)
- [Pricing](https://kanoa.ai/pricing)
- Resources
  
  
  
  
  
  
  
  
  
    - [Live Demo](http://demo.kanoa.ai/data/perspective/client/kanoaDemo/)
    - [Downloads](https://kanoa.ai/downloads)
    - [Blog](https://kanoa.ai/kanoa-blog)
    - [Partners](https://kanoa.ai/become-a-kanoa-partner)
      
      
      
      
      
      
      
      
      
          - [Systems Integrators](https://kanoa.ai/systems-integrator-partners)
          - [Friends of Kanoa](https://kanoa.ai/partners)
          - [Become a Partner](https://kanoa.ai/become-a-kanoa-partner)
    - [Kanoa on YouTube](https://www.youtube.com/@kanoa_ai)
    - [About](https://kanoa.ai/about)
- Support
  
  
  
  
  
  
  
  
  
    - [Documentation](https://docs.kanoa.ai/)
    - [Support Portal](https://kanoa.freshdesk.com/support/login)
    - [Support Policy](https://kanoa.ai/hubfs/Documents/Kanoa%20Support%20Policy%2020240618.pdf)
- [Contact](https://kanoa.ai/contact)

 Download Kanoa

[announcements](https://kanoa.ai/kanoa-blog/tag/announcements)[kanoaExplains](https://kanoa.ai/kanoa-blog/tag/kanoaexplains)

# Spin Up a Kanoa MES Dev Environment in Minutes: Introducing the Kanoa Docker Template

[![Aaron Rai](https://kanoa.ai/hs-fs/hubfs/aaronRai.jpeg?width=40&height=40&name=aaronRai.jpeg)](https://kanoa.ai/kanoa-blog/author/aaron-rai)

by [Aaron Rai](https://kanoa.ai/kanoa-blog/author/aaron-rai)

 4 min read

 Jul 30, 2026, 9:14:28 AM

Getting a new Ignition + MES environment running has traditionally meant a manual checklist. Install Ignition. Restore a gateway backup. Track down the right modules. Stand up a database by hand. Hope your teammate's "working" environment actually matches yours. None of that is version-controlled, and none of it is easy to hand to a new developer or a systems integrator joining the project.

We wanted a better starting point, so we built one and made it public.

[`kanoa-docker-template`](https://github.com/kanoa-ai/kanoa-docker-template) is a free, public GitHub template repository that gets you a local, version-controlled Ignition gateway with Kanoa MES and a SQL Server database running with a single `docker compose up`. There's no license or purchase required to try it. Generate a repo from the template, clone it, and you have a working Kanoa MES environment in minutes.

One important note up front: this is a development environment only. It's built to help you develop against and version-control a Kanoa implementation quickly, not to run in production. The bundled SQL Server image is licensed for development use only.

## Prerequisites

You don't need any Ignition-specific tooling to get started, but you do need Docker. The template only assumes a small slice of it:

- [Docker](https://docs.docker.com/get-docker/) and Docker Compose, installed and running
- Enough command-line comfort to run `docker compose up`, `docker compose logs`, and `docker compose down`
- Optionally, [Traefik](https://traefik.io/) if you want clean hostname-based routing instead of a raw `localhost` port (more on that below)

If Docker itself is new to you, Docker's own [get-started guide](https://docs.docker.com/get-started/) covers about all the background this template assumes.

## What's actually in the box

The template is a small, three-service Docker Compose stack:

| Service | Job |
| --- | --- |
| `db` | SQL Server (Developer edition) |
| `db-init` | One-shot job that creates the application database on first startup, then exits |
| `kanoa` | Ignition gateway, pre-loaded with the Embr Charts and Kanoa MES modules |

Compose handles the sequencing so you don't have to think about it. The `kanoa` gateway waits on `db`'s healthcheck before it starts, and waits for `db-init` to finish successfully before that, so you never hit the classic "Ignition came up before the database was ready" race condition. The database itself is idempotent: `db-init` only creates the application database if it doesn't already exist, so re-running `docker compose up` is always safe.

Gateway configuration and Perspective projects live under `services/ignition/config` and `services/ignition/projects`, mounted straight into the container. That's the part that matters most.

## Why Docker, specifically

Docker isn't incidental here. Two things it gives us that would otherwise be hard to get:

**A reproducible, disposable environment.** The whole stack (gateway, database, modules) is declared in one compose file. Anyone can bring it up identically on their own machine, tear it down, and bring it back up again, without a shared "golden" gateway or a pile of setup notes in a wiki.

**Version control without relying on an Ignition module for it.** Some Ignition modules add version-control capability inside the gateway itself. We wanted the opposite: keep the Ignition install as close to vanilla as possible, and let git and the filesystem handle version control from outside the gateway. Because Docker mounts the config and project directories in from the host, they're just files on disk, tracked by git like any other code, with no extra module or export step needed.

## A version control story, not just a Docker story

The usual way to move an Ignition project between environments, or between people, is a gateway backup (`.gwbk`). It works, but it's a binary blob. You can't diff it, review it in a pull request, or see what changed between two backups without exporting and comparing by hand.

Because this template mounts the gateway's config and projects directories directly from the filesystem, they're just files, tracked in git like everything else in your codebase. Perspective view changes show up as real diffs. Tag configuration changes are reviewable. Onboarding a new developer or contractor is `git clone` plus `docker compose up`, not a request for someone's latest `.gwbk` export.

That's the goal: a Kanoa implementation you can develop the way you'd develop any other piece of software, with branches, pull requests, code review, and a clean history, instead of something that lives only inside a gateway.

## A few details worth calling out

**Everything's environment-driven.** Secrets and machine-specific settings live in a gitignored `.env` file, copied from `.env.example`. The SA password, database name, and Compose project name are all configurable without touching tracked files.

**Local overrides without local drift.** Need to run on Apple Silicon, where the full SQL Server image doesn't work? The template ships a working `.local/docker-compose.override.yaml` that swaps in Azure SQL Edge for ARM64, layered on top of the base compose file via `COMPOSE_FILE` and gitignored so it never leaks into the shared config. Anyone can adapt the stack to their machine without editing (or fighting over) the base file.

**A real access story, not just `localhost:8088`.** The default setup is wired for an external Traefik proxy, so the gateway is reachable at a clean hostname like `http://kanoa-dev.localtest.me` instead of juggling host ports. `*.localtest.me` resolves to `127.0.0.1` for everyone, with zero `/etc/hosts` editing required. Prefer a direct port instead? Uncommenting a few lines gets you `localhost:8088`.

**Upgrades are a one-line edit.** Ignition and the bundled modules are declared as images and volumes in the compose file, not installed by hand. Moving to a new Ignition release or a newer module build usually just means bumping the version on one line and running `docker compose up -d` again.

## Getting started

1. On GitHub, click **Use this template** on [`kanoa-ai/kanoa-docker-template`](https://github.com/kanoa-ai/kanoa-docker-template) to generate your own repo, then clone it.
2. Copy `.env.example` to `.env` and set a `SA_PASSWORD` that meets SQL Server's complexity requirements.
3. Run `docker compose up -d`.

Ignition comes up with Kanoa MES and Embr Charts already installed, connected to a dedicated application database that was provisioned automatically. From there, `docker compose logs -f kanoa` tails the gateway logs, `docker compose exec kanoa bash` drops you into the container, and `docker compose down -v` gives you a clean slate whenever you want one.

## Why this matters

A Kanoa implementation can live in the same workflow as the rest of your engineering: cloned, branched, reviewed, and reproduced identically on any machine, kept close to vanilla Ignition, with git doing the version-control work instead of a module or a gateway backup.

It's free, it's public, and it's meant to be disposable. Spin it up, build against it, tear it down, spin up a fresh one whenever you need to. Generate the repo and run `docker compose up`.

 

Share this

[Share on X](https://x.com/intent/post?url=https://kanoa.ai/kanoa-blog/spin-up-a-kanoa-mes-dev-environment-in-minutes-introducing-the-kanoa-docker-template&text=Spin+Up+a+Kanoa+MES+Dev+Environment+in+Minutes%3A+Introducing+the+Kanoa+Docker+Template) [Share on Facebook](https://www.facebook.com/sharer/sharer.php?u=https://kanoa.ai/kanoa-blog/spin-up-a-kanoa-mes-dev-environment-in-minutes-introducing-the-kanoa-docker-template&t=Spin+Up+a+Kanoa+MES+Dev+Environment+in+Minutes%3A+Introducing+the+Kanoa+Docker+Template) [Share on LinkedIn](https://www.linkedin.com/shareArticle?mini=true&url=https://kanoa.ai/kanoa-blog/spin-up-a-kanoa-mes-dev-environment-in-minutes-introducing-the-kanoa-docker-template&t=Spin+Up+a+Kanoa+MES+Dev+Environment+in+Minutes%3A+Introducing+the+Kanoa+Docker+Template)

Previous story

[← Introducing Kanoa Inventory](https://kanoa.ai/kanoa-blog/introducing-kanoa-inventory)

<https://kanoa.ai/kanoa-blog>

Next story

[The Kanoa Systems Integrator Program Levels Up →](https://kanoa.ai/kanoa-blog/the-kanoa-systems-integrator-program-levels-up)

## You May Also Like

These Related Stories

[Kanoa to Showcase Kanoa MES Live at ICC 2025 in Sacramento](https://kanoa.ai/kanoa-blog/kanoa-to-showcase-kanoa-mes-live-at-icc-2025-in-sacramento)

![ignition icc level up](https://kanoa.ai/hubfs/Screenshot%202025-06-19%20082848.png)

[kanoa](https://kanoa.ai/kanoa-blog/tag/kanoa)

### Kanoa to Showcase Kanoa MES Live at ICC 2025 in Sacramento

Jun 19, 2025, 8:34:59 AM 2 min read

[Kanoa Announces CMMS Solution in Development for Kanoa MES - Sign up for Early Access](https://kanoa.ai/kanoa-blog/kanoa-announces-cmms-solution-in-development-for-kanoa-mes)

![](https://kanoa.ai/hubfs/Kanoa%20Blog%20-%20CMMS%20Announcement.png)

[announcements](https://kanoa.ai/kanoa-blog/tag/announcements)

### Kanoa Announces CMMS Solution in Development for Kanoa MES - Sign up for Early Access

Mar 18, 2026, 10:50:10 AM 4 min read

[Kanoa MES v1.7 - Kanoa MES adds Traceability](https://kanoa.ai/kanoa-blog/kanoa-mes-1.7)

![](https://kanoa.ai/hubfs/Kanoa%20Blog%20-%20Thumbnails%20(LinkedIn%20Single%20Image%20Ad)%20(2).png)

[kanoa](https://kanoa.ai/kanoa-blog/tag/kanoa)

### Kanoa MES v1.7 - Kanoa MES adds Traceability

Jan 13, 2025, 4:30:38 PM 2 min read

### No Comments Yet

Let us know what you think

## About Kanoa

Creating Ignition-powered MES solutions that empower manufacturers and drive Digital Transformation

<https://www.linkedin.com/company/kanoacon/><https://www.youtube.com/@kanoa_ai>

[Kanoa MES](https://kanoa.ai/kanoa-mes-overview)

- [Kanoa Ops](https://kanoa.ai/kanoa-ops)
- [Kanoa Trace](https://kanoa.ai/kanoa-trace)
- [Kanoa Quality](https://kanoa.ai/kanoa-quality)
- [Kanoa Maintenance](https://kanoa.ai/kanoa-maintenance)
- [Kanoa Inventory](https://kanoa.ai/kanoa-inventory)
- [Implementation Assurance](https://kanoa.ai/implementation-assurance-expert-guidance-for-successful-mes-kanoa)
- [Powered by Ignition](https://kanoa.ai/powered-by-ignition)
- [Pricing](https://kanoa.ai/pricing)

Resources

- [Live Demo](https://demo.kanoa.ai)
- [Read our Blog](https://kanoa.ai/kanoa-blog)
- [Downloads](https://kanoa.ai/downloads)
- [Partners](https://kanoa.ai/partners)

Support

- [Documentation](http://docs.kanoa.ai)
- [Support Portal](https://kanoa.freshdesk.com/)
- [Support Policy](https://kanoa.ai/hubfs/Documents/Kanoa%20Support%20Policy%2020240618.pdf)

Company

- [About us](https://kanoa.ai/about)
- [Contact us](https://kanoa.ai/contact)

 Copyright © 2026 Kanoa, Inc.

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Aaron Rai",
    "url" : "https://kanoa.ai/kanoa-blog/author/aaron-rai"
  },
  "dateModified" : "2026-07-30T13:14:28.605Z",
  "datePublished" : "2026-07-30T13:14:28.000Z",
  "headline" : "Spin Up a Kanoa MES Dev Environment in Minutes: Introducing the Kanoa Docker Template",
  "image" : [ "https://kanoa.ai/hubfs/Kanoa%20Blog%20-%20shipping%20containers%20on%20a%20dock.png" ],
  "mainEntityOfPage" : {
    "@id" : "https://kanoa.ai/kanoa-blog/spin-up-a-kanoa-mes-dev-environment-in-minutes-introducing-the-kanoa-docker-template",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://kanoa.ai/hubfs/primary_logo.png"
    }
  }
}
```