meldestelle/.junie/guidelines/technology-guides/docker/docker-architecture.md
2025-12-31 00:20:29 +01:00

8.2 KiB
Raw Blame History

Docker-Architektur und Services


guideline_type: "technology" scope: "docker-architecture" audience: ["developers", "ai-assistants", "devops"] last_updated: "2025-09-15" dependencies: ["docker-overview.md", "master-guideline.md"] related_files: ["docker-compose.yml", "docker/versions.toml", "scripts/docker-versions-update.sh"] ai_context: "Docker-Container-Architektur, Service-Definitionen und zentrale Versionsverwaltung"


🏗️ Architektur-Überblick

📖 Hinweis: Für einen allgemeinen Überblick über die Docker-Infrastruktur siehe docker-overview.

Container-Kategorien

graph TB
    subgraph "Infrastructure Services"
        PG[PostgresQL]
        RD[Redis]
        KC[Keycloak]
        KF[Kafka+Zookeeper]
        CS[Consul]
    end

    subgraph "Application Services"
        GW[API Gateway]
        AS[Auth Server]
        MS[Monitoring Server]
        PS[Ping Service]
    end

    subgraph "Client Applications"
        WA[Web App]
        DA[Desktop App - Native]
    end

    subgraph "Monitoring Stack"
        PR[Prometheus]
        GR[Grafana]
        ZK[Zipkin]
        NX[Nginx - Prod]
    end

    Infrastructure --> Application
    Application --> Client
    Monitoring --> Infrastructure
    Monitoring --> Application

Service-Ports Matrix

Service Development Production Health Check Debug Port Version
PostgreSQL 5432 Internal pg_isready -U meldestelle -d meldestelle - 16-alpine
Redis 6379 Internal redis-cli ping - 7-alpine
Keycloak 8180 8443 (HTTPS) /health/ready - 26.0.7
Kafka 9092 Internal kafka-topics --bootstrap-server localhost:9092 --list - 7.4.0
Zookeeper 2181 Internal nc -z localhost 2181 - 7.4.0
Consul 8500 Internal /v1/status/leader - 1.15
Auth Server 8081 Internal /actuator/health/readiness 5005 1.0.0
Ping Service 8082 Internal /actuator/health/readiness 5005 1.0.0
Monitoring Server 8083 Internal /actuator/health/readiness 5005 1.0.0
Prometheus 9090 Internal /-/healthy - v2.54.1
Grafana 3000 3443 (HTTPS) /api/health - 11.3.0
Nginx - 80/443 /health - 1.25-alpine

🎯 Zentrale Docker-Versionsverwaltung

🤖 AI-Assistant Hinweis: Das Versionssystem folgt dem Single Source of Truth Prinzip:

  • Zentrale Datei: docker/versions.toml definiert alle Versionen
  • Build-Args: Automatisch generierte .env-Dateien in docker/build-args/
  • Updates: Via ./scripts/docker-versions-update.sh

Überblick und Motivation

Version 3.0.0 führt eine revolutionäre Änderung in der Docker-Versionsverwaltung ein: die zentrale Verwaltung aller Build-Argumente analog zum bewährten gradle/libs.versions.toml System.

Das Problem vor Version 3.0.0

# BEFORE: Redundante Hardcodierung in 12+ Dockerfiles
ARG GRADLE_VERSION=9.0.0
ARG GRADLE_VERSION=9.0.0
ARG GRADLE_VERSION=9.0.0
# ... 9 weitere Male identisch wiederholt!

Die Lösung: Single Source of Truth

# docker/versions.toml - SINGLE SOURCE OF TRUTH
[versions]
gradle = "9.2.1"
java = "25"
node = "22.21.0"
nginx = "1.28.0-alpine"
prometheus = "v2.54.1"
grafana = "11.3.0"
keycloak = "26.4.2"

🏗️ Architektur der zentralen Versionsverwaltung

docker/
├── versions.toml                    # 🎯 Single Source of Truth
├── build-args/                     # Auto-generierte Environment Files
│   ├── global.env                  # Globale Build-Argumente
│   ├── services.env                # dockerfiles/services/*
│   ├── clients.env                 # dockerfiles/clients/*
│   └── infrastructure.env          # dockerfiles/infrastructure/*
└── README.md                       # Dokumentation

📊 Hierarchische Versionsverwaltung

1. Globale Versionen (docker/build-args/global.env)

Verwendet von allen Dockerfiles:

# --- Build Tools ---
GRADLE_VERSION=9.2.1
JAVA_VERSION=25

# --- Build Metadata ---
BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
VERSION=1.0.0

# --- Common Base Images ---
ALPINE_VERSION=3.19
ECLIPSE_TEMURIN_JDK_VERSION=25-jdk-alpine
ECLIPSE_TEMURIN_JRE_VERSION=25-jre-alpine

# --- Monitoring & Infrastructure Services ---
DOCKER_PROMETHEUS_VERSION=v2.54.1
DOCKER_GRAFANA_VERSION=11.3.0
DOCKER_KEYCLOAK_VERSION=26.4.2

2. Kategorie-spezifische Versionen

Services (docker/build-args/services.env):

SPRING_PROFILES_ACTIVE=docker
SERVICE_PORT=8080
PING_SERVICE_PORT=8082
MEMBERS_SERVICE_PORT=8083

Clients (docker/build-args/clients.env):

NODE_VERSION=22.21.0
NGINX_VERSION=1.28.0-alpine
WEB_APP_PORT=4000
DESKTOP_APP_VNC_PORT=5901

Infrastructure (docker/build-args/infrastructure.env):

SPRING_PROFILES_ACTIVE=default
GATEWAY_PORT=8081
AUTH_SERVER_PORT=8087

🛠️ Verwendung der zentralen Versionsverwaltung

Automatisierte Builds mit scripts/docker-build.sh

# Alle Services mit zentralen Versionen bauen
./scripts/docker-build.sh services

# Client-Anwendungen bauen
./scripts/docker-build.sh clients

# Komplettes System bauen
./scripts/docker-build.sh all

# Aktuelle Versionen anzeigen
./scripts/docker-build.sh --versions

Versionen aktualisieren mit scripts/docker-versions-update.sh

# Aktuelle Versionen anzeigen
./scripts/docker-versions-update.sh show

# Java auf Version 22 upgraden
./scripts/docker-versions-update.sh update java 22

# Gradle auf 9.2.1 upgraden
./scripts/docker-versions-update.sh update gradle 9.2.1

# Prometheus auf neueste Version upgraden
./scripts/docker-versions-update.sh update prometheus v2.54.1

# Grafana auf neueste Version upgraden
./scripts/docker-versions-update.sh update grafana 11.3.0

# Keycloak auf neueste Version upgraden
./scripts/docker-versions-update.sh update keycloak 26.4.2

# Alle Environment-Dateien synchronisieren
./scripts/docker-versions-update.sh sync

🎯 Für AI-Assistenten: Architektur-Schnellreferenz

Service-Kategorien

  • Infrastructure: PostgresQL, Redis, Keycloak, Kafka, Zookeeper, Consul
  • Application: API Gateway, Auth Server, Monitoring Server, Ping Service
  • Clients: Web App (Port 3000), Desktop App
  • Monitoring: Prometheus (9090), Grafana (3000), Zipkin, Nginx

Wichtige Befehle

# Service-Status prüfen
docker-compose ps

# Logs eines Services anzeigen
docker-compose logs <service-name>

# Versionen aktualisieren
./scripts/docker-versions-update.sh show
./scripts/docker-versions-update.sh update <component> <version>

# Services neu starten
docker-compose restart <service-name>

Zentrale Konfigurationsdateien

  • docker/versions.toml - Alle Versionen
  • docker-compose.yml - Haupt-Services
  • docker-compose.clients.yml - Client-Anwendungen
  • docker/build-args/*.env - Generierte Build-Argumente

Navigation: