Contents
Docker and containers Enterprise
The team server image holds one program. It has no shell, runs as a non-root user and works with a read-only root file system. The image is available for linux/amd64 and linux/arm64, and Docker selects the correct one. The gitta Enterprise image for IBM z/OS Container Extensions (zCX) is built for IBM Z (linux/s390x), see Run gitta on z/OS with zCX.
Docker
$ docker run -d --name gitta --restart unless-stopped --init \
-e GITTA_TOKENS=<admin token> -e GITTA_SIGNING_KEY=<48 random characters> \
-e GITTA_LICENSE="$(cat example.license)" \
-v gitta-data:/data -p 8080:8080 --read-only --cap-drop ALL \
europe-north1-docker.pkg.dev/gitta-io-prod/enterprise/gitta-server:0.1.0
$ curl http://localhost:8080/healthz
okPut a TLS proxy in front, or give the server a certificate. See TLS.
Docker Compose
# docker-compose.yml
services:
gitta-server:
image: europe-north1-docker.pkg.dev/gitta-io-prod/enterprise/gitta-server:0.1.0
init: true
restart: unless-stopped
env_file: .env # GITTA_TOKENS, GITTA_SIGNING_KEY, GITTA_LICENSE
ports: ["8080:8080"]
volumes: [gitta-data:/data]
volumes:
gitta-data:
$ printf "GITTA_TOKENS=%s\nGITTA_SIGNING_KEY=%s\n" $(openssl rand -hex 24) $(openssl rand -hex 32) > .env
$ docker compose up -dManaged container services
The same image runs on Cloud Run, Azure Container Apps and AWS ECS with Fargate. The server reads the port from PORT when the platform sets it.
Each server keeps the team's state in memory. Give each server its own service with exactly one instance:
- On Cloud Run, set minimum and maximum instances to 1 and keep CPU always allocated.
- On Azure Container Apps, set minimum and maximum replicas to 1.
- On ECS, set the desired count to 1, with one service per server.
Do not put several instances behind one address, and do not scale to zero. For more than one server, run more services. See High availability.