Aufgabe B - Installation von PostgreSQL oder MariaDB im HTL Live Image
- Docker & Docker Compose im HTL Villach Debian Live Image
- PostgreSQL + pgAdmin als Container-Services
- Persistente Datenhaltung über named volumes
- Fehlersuche & Best Practices
Aufgaben
Abschnitt betitelt „Aufgaben“1. Einführung: Warum PostgreSQL als Container?
Abschnitt betitelt „1. Einführung: Warum PostgreSQL als Container?“Ein Container kapselt PostgreSQL inklusive Version, Abhängigkeiten und Konfiguration. So läuft die Datenbank auf jedem Rechner identisch, startet in Sekunden und kann rückstandsfrei entfernt oder aktualisiert werden. Named Volumes sorgen dafür, dass Daten unabhängig vom Container persistent bleiben. Mit Docker Compose wird die Umgebung deklarativ beschrieben (Services, Netzwerk, Ports, Variablen, Volumes) und mit einem Befehl (docker compose up -d) reproduzierbar gestartet – besser nachvollziehbar und versionskontrollierbar als einzelne docker run-Kommandos.
Im HTL Villach Debian Live Image sind Tools und Defaults einheitlich; mit eingerichtetem persistentem Speicher bleibt auch /var/lib/docker erhalten. Das ermöglicht faire, reproduzierbare Übungen/Prüfungen und bei Problemen einen schnellen Reset durch Neustart oder Neuaufsetzen der Compose-Services – ohne Neuinstallation.
2. Aufsetzen & Starten mit Docker Compose
Abschnitt betitelt „2. Aufsetzen & Starten mit Docker Compose“Operator: Konstruieren
Voraussetzungen: Im Live-Image ist Docker bereits installiert. Prüfen Sie:
docker --versiondocker compose version
- Arbeitsverzeichnis anlegen
mkdir -p ~/rdbms && cd ~/rdbmsdocker-compose.ymlerstellen
Hinweis: Ändern Sie alle Standard-Passwörter/Benutzer auf sichere Werte.
services: postgres: image: postgres:17 container_name: postgres restart: unless-stopped environment: # Change this! - POSTGRES_USER=pgadmin - POSTGRES_PASSWORD=postgres-root-password networks: - rdbms ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data
pgadmin: image: dpage/pgadmin4:9.8 container_name: pgadmin restart: unless-stopped environment: - PGADMIN_DEFAULT_PASSWORD=s3cret networks: - rdbms ports: - "3081:80" - "3443:443" volumes: - pgadmin-data:/var/lib/pgadmin
networks: rdbms:
volumes: postgres-etc: postgres-data: pgadmin-data:Optional (empfohlen): Nutzen Sie eine
.env-Datei und ersetzen Sie die Werte im YAML durch${VARIABLE}. Beispiel:${POSTGRES_USER},${POSTGRES_PASSWORD},${PGADMIN_DEFAULT_EMAIL},${PGADMIN_DEFAULT_PASSWORD}.
- Services starten
docker compose up -d- Logs prüfen
docker compose logs -f postgres- Verbindung testen (psql)
docker exec -it postgres psql -U pgadmin- pgAdmin aufrufen
-
Browser:
http://localhost:3081 -
Login mit den in Compose gesetzten PGADMIN_DEFAULT_…-Werten.
-
In pgAdmin neuen Server anlegen:
- Name:
Postgres - Host:
postgres - Port:
5432 - Benutzer/Passwort: wie in Compose gesetzt.
- Name:
Hinweis: Der Hostname
postgresfunktioniert innerhalb des Compose-Netzwerksrdbms. Vom Host aus verwenden Sie127.0.0.1:5432.
3. Troubleshooting & Verbesserungen
Abschnitt betitelt „3. Troubleshooting & Verbesserungen“Operator: Bewerten
Bewerten Sie die folgenden Szenarien: Nennen Sie jeweils wahrscheinliche Ursache und konkrete Abhilfe/Verbesserung.
-
postgresstartet in einer Schleife neu- Ursache: ungültige/wechselnde Credentials, beschädigtes Datenverzeichnis, Port-Konflikt mit lokalem Postgres.
- Abhilfe: Logs prüfen, Ports anpassen (z.B.
55432:5432),postgres-data-Volume leeren/neu initialisieren (Achtung Datenverlust!).
-
pgAdmin kann nicht verbinden
- Ursache: falscher Host (
localhoststattpostgresin pgAdmin), falscher Benutzer/Passwort, Netzwerkrdbmsfehlt. - Abhilfe: Hostname
postgresverwenden, Credentials prüfen,docker compose down && docker compose up -d(Netzwerk wird neu erstellt).
- Ursache: falscher Host (
-
Performance-Probleme
- Ursache: zu wenig RAM/CPU der VM, viele gleichzeitige Container, I/O auf dynamisch wachsenden VDI.
- Abhilfe: VM-Ressourcen erhöhen (z.B. 8GiB RAM, 4 Cores), Volumes aufräumen, Datenbank-Settings prüfen.
-
Verbesserungsvorschläge für das Compose-File
- Healthcheck ergänzen (z.B.
pg_isready -U $${POSTGRES_USER}). - TZ setzen (z.B.
- TZ=Europe/Vienna).
- Healthcheck ergänzen (z.B.
(Keine Abgabe)
Abschnitt betitelt „(Keine Abgabe)“Diese Übung ist eine Arbeitsunterlage; es ist keine Abgabe vorgesehen. Dokumentation/Screenshots dienen Ihrer eigenen Nachvollziehbarkeit.
HTL Villach, 2025–2026,
https://www.htl-villach.at