meldestelle/.junie/guidelines/technology-guides/docker/docker-architecture.md

256 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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](docker-overview.md).
### Container-Kategorien
```mermaid
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
```dockerfile
# 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
```toml
# docker/versions.toml - SINGLE SOURCE OF TRUTH
[versions]
gradle = "9.1.0"
java = "21"
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
```plaintext
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:
```bash
# --- 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`):
```bash
SPRING_PROFILES_ACTIVE=docker
SERVICE_PORT=8080
PING_SERVICE_PORT=8082
MEMBERS_SERVICE_PORT=8083
```
**Clients** (`docker/build-args/clients.env`):
```bash
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`):
```bash
SPRING_PROFILES_ACTIVE=default
GATEWAY_PORT=8081
AUTH_SERVER_PORT=8087
```
### 🛠️ Verwendung der zentralen Versionsverwaltung
#### Automatisierte Builds mit `scripts/docker-build.sh`
```bash
# 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`
```bash
# 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.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
```bash
# 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:**
- [master-guideline](../../master-guideline.md) Hauptrichtlinie für das Projekt
- [Docker-Overview](./docker-overview.md) - Grundlagen und Philosophie
- [Docker-Development](./docker-development.md) - Entwicklungsworkflow
- [Docker-Production](./docker-production.md) - Production-Deployment
- [Docker-Monitoring](./docker-monitoring.md) - Observability
- [Docker-Troubleshooting](./docker-troubleshooting.md) - Problemlösung