Docker Basics & Power Snippets für Ubuntu: 24.04 Teil 2

Docker Basics & Power Snippets für Ubuntu: 24.04 Teil 2

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)