[[start|zurück]]
====== Docker – Grundlagen (Images, Container, Volumes, Networks, Compose) ======
Docker ist eine Container-Technologie, die Anwendungen leichtgewichtig,
portabel und isoliert betreibt, ohne komplette virtuelle Maschinen zu benötigen.
Container teilen sich den Host-Kernel, benötigen aber keine eigenen Betriebssysteme
→ dadurch starten sie extrem schnell und verbrauchen wenig Ressourcen.
---
====== 1. Warum Docker? ======
Docker löst typische IT-Probleme:
* „Läuft auf meinem Rechner, aber nicht bei dir“
* unterschiedliche Abhängigkeiten / Bibliotheken
* komplizierte Installationen
* Versionskonflikte
Mit Docker bekommst du:
* **isolierte Umgebung**
* **reproduzierbare Builds**
* **portierbare Anwendungen**
* **schnelle Deployments**
* **perfekt für Microservices**
---
====== 2. Container vs virtuelle Maschinen ======
===== Container =====
* teilen sich den Kernel
* starten in Sekunden
* sehr leichtgewichtig
* ideal für Webapps, DBs, Dienste
===== Virtuelle Maschinen =====
* vollständiges OS
* hohe Isolation
* größere Ressourcenlast
Vergleich:
Container:
Host → Kernel → Container → App
VM:
Host → Hypervisor → volles OS → App
---
====== 3. Docker-Image ======
Ein Image ist eine **Vorlage**, aus der Container gestartet werden.
Besteht aus Schichten (Layers):
* Basis-Image (z. B. Debian, Alpine)
* App-Dateien
* Konfiguration
* Bibliotheken
Images sind:
* unveränderlich
* versionierbar
* portabel
Beispiele:
nginx:latest
mariadb:11
ubuntu:22.04
---
====== 4. Container ======
Ein Container ist eine laufende Instanz eines Images.
Merkmale:
* isoliert vom Rest des Systems
* hat eigene Prozess-ID, eigenes Netzwerk
* nutzt das Image als Grundlage
* nicht persistent (ohne Volume gehen Daten verloren)
Befehle:
docker run
docker ps
docker stop
docker logs
---
====== 5. Volumes – Persistente Daten ======
Container-Daten sind flüchtig.
Für dauerhafte Speicherung nutzt man **Volumes**.
Beispiele:
* Datenbanken
* Konfigurationen
* Zertifikate
* Uploads (z. B. Nextcloud)
Volume-Typen:
* named volumes („docker-volume“)
* bind mounts (z. B. /opt/stacks/app/data)
Container → /data ↔ /opt/stacks/app/data
---
====== 6. Docker Networks ======
Container kommunizieren über Netzwerke.
Arten:
===== bridge =====
Standard-Netzwerk, Container → Container.
===== host =====
Container nutzt Host-Netzwerk direkt.
===== macvlan =====
Container bekommt eigene MAC-Adresse im LAN.
===== overlay =====
Für Swarm/Kubernetes-Cluster.
Beispiel:
docker network create mynet
---
====== 7. Docker Compose ======
Docker Compose definiert komplette Anwendungen als YAML-Datei.
Einfaches Beispiel:
version: "3" # kann weggelassen werden da veraltet
services:
web:
image: nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
Vorteile:
* mehrere Container auf einmal starten
* verständliche Struktur
* Netzwerke, Volumes, Umgebungsvariablen definierbar
* ideal für jede moderne Architektur
Starten:
docker compose up -d
---
====== 8. Registries ======
Registries speichern Images.
Öffentliche:
* Docker Hub
* GitHub Container Registry
Private:
* Harbor
* GitLab Registry
* selbst gehosteter Registry-Container
---
====== 9. Sicherheit in Docker ======
* Container nicht als root ausführen
* eigene Netzwerke nutzen
* Secrets sicher speichern (docker secrets)
* nicht „latest“ verwenden
* Images regelmäßig aktualisieren
* wenig privilegierte Container starten (--cap-drop)
* Traefik/Nginx vor Webservices setzen
---
====== 10. Realwelt-Beispiele (praktisch & TG-tauglich) ======
===== Webserver + Datenbank =====
web (nginx)
db (mariadb)
===== Mein Home-Lab =====
* Traefik
* Portainer
* Vaultwarden
* Nextcloud
* Matrix
* Mailserver
* Monitoring (Grafana, Promtail, Loki)
* CrowdSec
===== Unternehmensumgebung =====
* Microservices
* Load Balancer
* CI/CD Pipelines
* API Gateways
---
====== 11. Best Practices ======
* eindeutige Verzeichnisstruktur (/opt/stacks/)
* alles in Docker Compose statt Einzellauf
* Secrets in .env oder docker secrets
* Healthchecks nutzen
* Backups der Volumes nicht vergessen
* Logs zentral erfassen (Loki, ELK)
---
====== Zusammenfassung ======
* Docker nutzt Container statt VMs
* Images als Vorlage → Container als laufende Instanz
* Volumes speichern Daten permanent
* Docker Networks verbinden Container
* Compose verwaltet komplette Anwendungen
* Container sind leicht, schnell und portabel
* Sicherheit ist wichtig (root vermeiden, Updates)
* Container sind Standard in DevOps & modernen IT-Umgebungen