Runbook: Docker

Dauer: ~15 Minuten
Rolle: DevOps, Entwickler
Voraussetzung: Docker Engine 20+

Data Gateway als Docker-Container betreiben.


Workflow

flowchart TD A[Start] --> B[Dockerfile erstellen] B --> C[Image bauen] C --> D[Container starten] D --> E[Health Check] E --> F{OK?} F -->|Ja| G[Fertig] F -->|Nein| H[docker logs prüfen] style G fill:#e8f5e9 style H fill:#ffebee


1. Dockerfile

# Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
 
# Gateway-Dateien kopieren
COPY publish/ .
 
# Nicht-Root-Benutzer
RUN useradd --system --no-create-home appuser
USER appuser
 
# Port
EXPOSE 5000
 
# Healthcheck
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD curl -f http://localhost:5000/health || exit 1
 
# Start
ENTRYPOINT ["dotnet", "WvdS.WebAPI.Data.Gateway.Api.dll"]

2. Image bauen

# Image bauen
docker build -t data-gateway:latest .
 
# Image taggen (für Registry)
docker tag data-gateway:latest registry.example.com/data-gateway:v3.0

3. Container starten

Einfacher Start:

docker run -d \
    --name gateway \
    -p 5000:5000 \
    -v $(pwd)/appsettings.json:/app/appsettings.json:ro \
    -v $(pwd)/data:/app/data \
    data-gateway:latest

Mit allen Optionen:

docker run -d \
    --name gateway \
    --restart unless-stopped \
    -p 5000:5000 \
    -v $(pwd)/config/appsettings.json:/app/appsettings.json:ro \
    -v $(pwd)/data:/app/data \
    -v $(pwd)/logs:/app/logs \
    -e ASPNETCORE_ENVIRONMENT=Production \
    -e TZ=Europe/Berlin \
    --memory=512m \
    --cpus=1 \
    --health-cmd="curl -f http://localhost:5000/health || exit 1" \
    --health-interval=30s \
    data-gateway:latest

4. Docker Compose

# docker-compose.yml
version: '3.8'

services:
  gateway:
    image: data-gateway:latest
    build:
      context: .
      dockerfile: Dockerfile
    container_name: data-gateway
    restart: unless-stopped
    ports:
      - "5000:5000"
    volumes:
      - ./config/appsettings.json:/app/appsettings.json:ro
      - ./data:/app/data
      - gateway-logs:/app/logs
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - TZ=Europe/Berlin
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '1'
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s
    networks:
      - gateway-net
 
  # Optional: Datenbank für Demo
  demo-db:
    image: postgres:16-alpine
    container_name: demo-db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=gateway
      - POSTGRES_PASSWORD=gateway123
      - POSTGRES_DB=demo
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - gateway-net

volumes:
  gateway-logs:
  postgres-data:

networks:
  gateway-net:
    driver: bridge

Starten:

# Alle Services starten
docker-compose up -d
 
# Logs anzeigen
docker-compose logs -f gateway
 
# Stoppen
docker-compose down

5. Health Check

# Container-Status
docker ps
 
# Health-Status
docker inspect --format='{{.State.Health.Status}}' gateway
 
# API-Test
curl http://localhost:5000/health
curl http://localhost:5000/api/v1/dsn/demo/tables

6. Container verwalten

Befehl Beschreibung
——–————–
docker start gateway Starten
docker stop gateway Stoppen
docker restart gateway Neustarten
docker logs gateway Logs anzeigen
docker logs -f gateway Live-Logs
docker exec -it gateway sh Shell im Container

7. Checkliste

# Prüfpunkt
———–
1 Dockerfile erstellt
2 Image gebaut
3 appsettings.json gemountet
4 Container gestartet
5 Health Check OK
6 Logs ohne Fehler

Troubleshooting

Problem Ursache Lösung
————————–
Container startet nicht Config-Fehler docker logs gateway
Port bereits belegt Host-Port belegt anderen Port verwenden
Permission denied Volume-Rechte chmod auf Host
Cannot connect to DB Netzwerk-Problem Docker-Netzwerk prüfen

Container-Shell für Debugging:

# Shell im laufenden Container
docker exec -it gateway sh
 
# Oder mit bash (wenn verfügbar)
docker exec -it gateway bash
 
# Dateien im Container prüfen
docker exec gateway ls -la /app/
docker exec gateway cat /app/appsettings.json

Multi-Stage Build (optimiert)

# Multi-Stage Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
 
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/publish .
RUN useradd --system --no-create-home appuser
USER appuser
EXPOSE 5000
HEALTHCHECK --interval=30s --timeout=5s CMD curl -f http://localhost:5000/health || exit 1
ENTRYPOINT ["dotnet", "WvdS.WebAPI.Data.Gateway.Api.dll"]

Verwandte Runbooks


« ← systemd | → Kubernetes »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional

Zuletzt geändert: den 29.01.2026 um 15:12