1. Backup und Restore von Docker-Containern & Volumes
Die Datensicherung ist auch in Container-Umgebungen unverzichtbar. Docker bietet flexible Möglichkeiten, um Containerdaten, Volumes und Images zu sichern und wiederherzustellen – sei es für das tägliche Backup, den schnellen Umzug auf einen anderen Server oder als Schutz gegen Datenverlust.
In diesem Abschnitt findest du praxisbewährte Befehle und Workflows, mit denen du Container, Volumes und Images effizient sichern und wiederherstellen kannst.
a) Ein Volume sichern
docker run --rm -v <volume_name>:/volume -v $(pwd):/backup ubuntu \ tar czf /backup/backup.tar.gz -C /volume .
Sichert das Volume <volume_name> als backup.tar.gz im aktuellen Verzeichnis.
b) Volume-Backup wiederherstellen
docker run --rm -v <volume_name>:/volume -v $(pwd):/backup ubuntu \ tar xzf /backup/backup.tar.gz -C /volume
c) Kompletten Container-Dateibaum sichern
docker export <containername> | gzip > container_backup.tar.gz # Und wieder importieren: gunzip -c container_backup.tar.gz | docker import - <neues_image>
2. Healthcheck (Container-Status automatisiert prüfen)
Gerade im produktiven Einsatz ist es entscheidend, stets zu wissen, ob alle Container und Dienste wie gewünscht laufen. Docker bietet Healthchecks und zahlreiche Möglichkeiten, den Status, die Erreichbarkeit und die Stabilität deiner Anwendungen automatisiert zu überwachen.
Hier lernst du, wie du mit einfachen Kommandos und Best Practices den Zustand deiner Container prüfen, Fehler frühzeitig erkennen und Probleme beheben kannst.
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Health}}" (Zeigt, ob ein Healthcheck im Container definiert ist!)
b) Einfache Shell-Healthchecks für alle Container (ping & web)
docker inspect --format '{{.Name}}: {{range .State.Health.Log}}{{.Output}}{{end}}' $(docker ps -q)
3. Monitoring (CPU/RAM, Live-Prozess-Überwachung, Logs)
Um Container-Infrastrukturen stabil und performant zu betreiben, ist umfassendes Monitoring Pflicht. Docker bringt eigene Tools zur Ressourcenüberwachung mit und lässt sich hervorragend mit externen Monitoring-Lösungen wie Prometheus und Grafana kombinieren.
Im folgenden Abschnitt findest du nützliche Tools und Kommandos, um Auslastung, Speicher, Logs und Prozesse deiner Container im Griff zu behalten – inklusive Beispiel für einen grafischen Monitoring-Stack
a) CPU & RAM live
docker stats
(Alle Container in Echtzeit, wie top/htop)
b) Speziellen Container „toppen“
docker top <containername>
c) Monitoring-Stack als Docker (Grafana + Prometheus)
Komplettes Monitoring einfach als Docker-Compose starten (Datei monitoring-stack.yml):
services: prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - prometheus_data:/prometheus grafana: image: grafana/grafana ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana volumes: prometheus_data: grafana_data:
docker compose -f monitoring-stack.yml up -d
4. Build-Automatisierung
Mit Docker wird nicht nur das Bereitstellen von Anwendungen vereinfacht, sondern auch das Bauen und Ausliefern – von der Entwicklung bis zur Produktion. Moderne Build-Workflows setzen auf Multistage-Builds, Automatisierung und Integration in CI/CD-Pipelines.
Hier findest du praktische Snippets, Tipps und Beispiele, um Build-Prozesse effizient, platzsparend und nachvollziehbar zu gestalten und Images automatisiert zu bauen und zu veröffentlichen.
a) Multistage Build für kleine Images (im Dockerfile)
# Stage 1: Build FROM python:3.12-slim as builder WORKDIR /app COPY requirements.txt . RUN pip install --user -r requirements.txt # Stage 2: Runtime FROM python:3.12-slim WORKDIR /app COPY --from=builder /root/.local /root/.local COPY . . ENV PATH=/root/.local/bin:$PATH CMD ["python", "main.py"] b) Build & push in einem Befehl bash Kopieren Bearbeiten docker build -t meinrepo/meinimage:1.0 . docker push meinrepo/meinimage:1.0
5. Security: Container nur mit minimalen Rechten
Sicherheit ist ein zentrales Thema im Umgang mit Containern und Docker-Umgebungen. Von minimalen Berechtigungen, restriktiven Netzwerk-Einstellungen bis hin zum sicheren Betrieb von Images gibt es viele Stellschrauben, um Angriffsflächen zu minimieren.
Im folgenden Abschnitt findest du praxiserprobte Befehle und Empfehlungen, wie du Container sicher betreibst, Rechte einschränkst, Images prüfst und automatische Security-Checks durchführst.
docker run -u 1000:1000 -it --rm ubuntu bash
1000:1000 = Standarduser, keine root-Rechte
b) Container ohne Netzwerk starten
docker run --network none -it ubuntu bash
c) Docker-Bench-Security testen
docker run -it --net host --pid host --cap-add audit_control \ --security-opt apparmor=unconfined \ --privileged --label docker_bench_security \ docker/docker-bench-security
6. Docker-Container automatisiert updaten (Watchtower)
Watchtower installieren:
docker run -d \ --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower --cleanup
Sucht regelmäßig nach neuen Images für laufende Container und aktualisiert sie automatisch.
7. „One-off“ Tasks in Containern
a) Kurz mal ein Tool in isolierter Umgebung ausführen
docker run --rm -it alpine sh (Startet ein temporäres, sauberes Alpine-Linux)
b) Einmalig ein Skript im laufenden Container ausführen
docker exec <containername> /pfad/zum/skript.sh
8. Netzwerk-Debug & -Test
a) Test: Kann Container X das Internet erreichen?
docker run --read-only -v daten:/app/data -it ubuntu bash
b) Capabilities einschränken (nur das Nötigste)
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE -it ubuntu bash
10. Nützliche Third-Party-Tools
a) LazyDocker: TUI für Container/Images/Logs/Volumes
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock lazyteam/lazydocker
(Mega praktisch für alle, die gerne mit Tastatur arbeiten!)
11. Schnell temporären Webserver im Container
docker run --rm -it -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx:alpine
Öffnet das aktuelle Verzeichnis sofort per HTTP auf Port 8080 im Browser!
12. Images und Volumes nach Größe sortiert anzeigen
docker system df docker images --format "{{.Repository}}:{{.Tag}} {{.Size}}" | sort -k2 -h docker volume ls -q | xargs -I{} docker volume inspect {} --format '{{.Name}}: {{.Mountpoint}}' | xargs du -sh
13. Automatisch alle Container neu starten
docker restart $(docker ps -q)