7.1 KiB
7.1 KiB
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
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.tomldefiniert alle Versionen- Build-Args: Automatisch generierte
.env-Dateien indocker/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.0.0"
java = "21"
node = "20.12.0"
nginx = "1.25-alpine"
prometheus = "v2.54.1"
grafana = "11.3.0"
keycloak = "26.0.7"
🏗️ 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.0.0
JAVA_VERSION=21
# --- 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=21-jdk-alpine
ECLIPSE_TEMURIN_JRE_VERSION=21-jre-alpine
# --- Monitoring & Infrastructure Services ---
DOCKER_PROMETHEUS_VERSION=v2.54.1
DOCKER_GRAFANA_VERSION=11.3.0
DOCKER_KEYCLOAK_VERSION=26.0.7
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=20.11.0
NGINX_VERSION=1.25-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.1.0 upgraden
./scripts/docker-versions-update.sh update gradle 9.1.0
# 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.0.7
# 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 Versionendocker-compose.yml- Haupt-Servicesdocker-compose.clients.yml- Client-Anwendungendocker/build-args/*.env- Generierte Build-Argumente
Navigation:
- Docker-Overview - Grundlagen und Philosophie
- Docker-Development - Entwicklungsworkflow
- Docker-Production - Production-Deployment
- Docker-Monitoring - Observability
- Docker-Troubleshooting - Problemlösung