Skip to main content
Comis publishes official Docker images to Docker Hub under the comisai organization. Releases are built automatically on every version tag via GitHub Actions and produce multi-arch manifests for linux/amd64 and linux/arm64.

Available images

ImageDescription
comisai/comisDaemon + gateway (production, slim base)
comisai/comis with -slim suffixSame image, explicit slim variant
comisai/comis with no suffix (default variant)Full node:22-bookworm base with debugging tools
comisai/comis-webNginx-served web dashboard SPA

Tag strategy

Every release tag (v1.0.19) produces the following tags automatically:
Tag patternExampleNotes
{{version}}1.0.19Immutable — never changes after push
{{major}}.{{minor}}1.0Moves forward to the latest patch
latestlatestDefault variant, latest release
{{version}}-slim1.0.19-slimSlim variant, immutable
{{major}}.{{minor}}-slim1.0-slimSlim variant, latest patch
latest-slimlatest-slimSlim variant, latest release
Variants:
  • Default (comisai/comis:latest) — node:22-bookworm base. Includes extra system packages useful for debugging in production.
  • Slim (comisai/comis:latest-slim) — node:22-bookworm-slim base. Smaller image with a reduced attack surface. Recommended for most deployments.
Pin to an immutable version tag in production (e.g. comisai/comis:1.0.19) rather than latest to avoid unexpected updates.

Pulling images

# Latest slim daemon (recommended)
docker pull comisai/comis:latest-slim

# Specific version
docker pull comisai/comis:1.0.19

# Web dashboard
docker pull comisai/comis-web:latest
Use with Docker Compose by setting the image environment variables:
export COMIS_IMAGE=comisai/comis:latest-slim
export COMIS_WEB_IMAGE=comisai/comis-web:latest
docker compose up -d
Or in your .env file:
COMIS_IMAGE=comisai/comis:latest-slim
COMIS_WEB_IMAGE=comisai/comis-web:latest

Automated releases via GitHub Actions

The workflow .github/workflows/dockerhub-release.yml runs on every v* tag push. It builds multi-arch images for both linux/amd64 and linux/arm64 using per-platform runners that merge into a single manifest — no QEMU emulation for the daemon, which keeps build times fast.

Workflow structure

push tag v* ─┬─► build (amd64) ─┬─► merge-default ──► comisai/comis:x.y.z
              │                  │                       comisai/comis:x.y
              │                  │                       comisai/comis:latest
              │   build (arm64) ─┤
              │                  └─► merge-slim ────► comisai/comis:x.y.z-slim
              │                                       comisai/comis:x.y-slim
              │                                       comisai/comis:latest-slim

              └─► build-web ──────────────────────► comisai/comis-web:x.y.z
                                                     comisai/comis-web:x.y
                                                     comisai/comis-web:latest
Each build job compiles both the default and slim variants. Because the two variants share the same build stage layers, the second variant uses the cached layers and completes near-instantly.

Required GitHub secrets

Add these two secrets at Settings → Secrets and variables → Actions:
SecretValue
DOCKERHUB_USERNAMEcomisai
DOCKERHUB_TOKENDocker Hub access token (Read/Write/Delete scope)
To create an access token: Docker Hub → Account Settings → Personal access tokens → Generate new token.

Triggering a release

Pushing a v* tag fires the Docker Hub workflow alongside release.yml (GitHub Release) and npm-publish.yml (npm packages) in parallel:
git tag v1.0.19
git push origin v1.0.19
The Docker Hub, GitHub Release, and npm publish all complete from a single tag push.

Caching

Build layers are cached in GitHub Actions cache (type=gha) scoped by platform and variant:
Cache keyScope
dh-default-linux/amd64Default variant, amd64
dh-default-linux/arm64Default variant, arm64
dh-slim-linux/amd64Slim variant, amd64
dh-slim-linux/arm64Slim variant, arm64
dh-webWeb dashboard
Subsequent releases reuse cached dependency and build layers, cutting build time significantly after the first run.

Manual publishing

To build and push manually from the repository root:
VERSION=1.0.19
USER=comisai

# Daemon — default variant
docker build -t $USER/comis:$VERSION -t $USER/comis:latest -f Dockerfile .
docker push $USER/comis:$VERSION
docker push $USER/comis:latest

# Daemon — slim variant
docker build --build-arg COMIS_VARIANT=slim \
  -t $USER/comis:$VERSION-slim -t $USER/comis:latest-slim -f Dockerfile .
docker push $USER/comis:$VERSION-slim
docker push $USER/comis:latest-slim

# Web dashboard
docker build -t $USER/comis-web:$VERSION -t $USER/comis-web:latest -f Dockerfile.web .
docker push $USER/comis-web:$VERSION
docker push $USER/comis-web:latest
For multi-arch builds locally (requires docker buildx):
docker buildx create --use --name comis-builder   # one-time

docker buildx build --platform linux/amd64,linux/arm64 \
  -t $USER/comis:$VERSION -t $USER/comis:latest \
  -f Dockerfile --push .

Docker Operations

Production Dockerfile details, Compose services, and security hardening.

Install with Docker

Quick-start setup using the automated setup script.