🐳 Docker
Docker ist eine Plattform zum Ausführen von Anwendungen in isolierten Containern. Dieses Spickzettel enthält Befehle für die Arbeit mit Images, Containern, Netzwerken, Volumes sowie Docker Compose und Swarm.
📦 Grundlegende Befehle
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker | Der Hauptbefehl der Docker-CLI zum Ausführen von Unterbefehlen und Verwalten von Containern, Images, Netzwerken und Volumes | |
| docker version | Installierte Docker-Version (Client und Server) anzeigen. Nützlich zur Überprüfung der Installation | |
| docker version --format '{{.Client.APIVersion}}' | Nur die Docker-Client-API-Version anzeigen | |
| docker version --format '{{.Server.Version}}' | Nur die Docker-Server- (Engine-)Version anzeigen | |
| docker version --format '{{json .}}' | Vollständige Versionsinformationen im JSON-Format ausgeben | |
| docker system info | Allgemeine Docker-Systeminformationen anzeigen: Anzahl der Container, Images, Ressourcen | |
| docker info | Docker-Daten anzeigen: Versionen, Netzwerke, Anzahl der Container und Images | |
| docker info --format '{{json .}}' | Informationen im JSON-Format ausgeben — nützlich für Automatisierung | |
| docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM' | Anzahl der CPUs und Gesamtspeicher anzeigen | |
| docker info --format '{{.Driver}}' | Den von Docker verwendeten Storage-Treiber anzeigen | |
| docker image pull | Ein Image von Docker Hub oder einer anderen Registry herunterladen. Container können ohne Images nicht ausgeführt werden | |
| docker pull ubuntu | Das neueste verfügbare Ubuntu-Image herunterladen | |
| docker pull nginx:alpine | Das schlanke Nginx-Image basierend auf Alpine Linux herunterladen | |
| docker pull redis:7 | Redis-Image in Version 7 herunterladen | |
| docker container run | Einen neuen Container aus einem Image erstellen und starten | |
| docker run -it ubuntu bash | Ubuntu mit einem interaktiven Bash-Terminal ausführen | |
| docker run -d nginx | Nginx im Detached-Modus (Hintergrund) starten | |
| docker run -p 8080:80 nginx | Nginx ausführen und Container-Port 80 an Host-Port 8080 binden | |
| docker container ls | Laufende Container auflisten | |
| docker ps | Nur laufende Container anzeigen | |
| docker ps -a | Alle Container einschließlich gestoppter anzeigen | |
| docker ps --format '{{.Names}}' | Nur Containernamen ausgeben | |
| docker container start | Einen oder mehrere gestoppte Container starten | |
| docker start container_name | Einen Container nach Namen starten | |
| docker start $(docker ps -aq) | Alle Container starten | |
| docker start -ai container_name | Einen Container starten und interaktives Terminal anhängen | |
| docker container stop | Einen laufenden Container stoppen | |
| docker stop container_name | Einen Container nach Namen stoppen | |
| docker stop $(docker ps -q) | Alle laufenden Container stoppen | |
| docker stop -t 5 container_name | Einen Container mit 5 Sekunden Zeit zum Beenden stoppen | |
| docker container restart | Einen Container neu starten | |
| docker restart container_name | Einen bestimmten Container neu starten | |
| docker restart $(docker ps -q) | Alle laufenden Container neu starten | |
| docker restart -t 10 container_name | Einen Container mit 10 Sekunden Verzögerung neu starten | |
| docker container rm | Einen Container entfernen | |
| docker rm container_name | Einen bestimmten gestoppten Container entfernen | |
| docker rm $(docker ps -aq) | Alle gestoppten Container entfernen | |
| docker rm -f container_name | Einen laufenden Container erzwingen und entfernen | |
| docker image ls | Heruntergeladene Images auflisten | |
| docker images | Alle Images auf dem Host anzeigen | |
| docker images -a | Alle Images einschließlich Zwischenebenen anzeigen | |
| docker images --format '{{.Repository}}:{{.Tag}}' | Nur Imagenamen und Tags ausgeben | |
| docker image rm | Ein oder mehrere Images aus dem lokalen Speicher entfernen | |
| docker rmi test1:latest | Image mit Tag  | |
| docker rmi 1a2b3c4d5e6f | Ein Image nach seiner ID entfernen | |
| docker rmi $(docker images -q) | Alle Images entfernen (mit Vorsicht verwenden!) | 
🔁 Containerverwaltung
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker container exec | Einen Befehl in einem laufenden Container ausführen | |
| docker exec -it container bash | Eine interaktive Bash-Shell im Container  | |
| docker exec container ls /app | 
 | |
| docker exec -d container touch /tmp/testfile | Einen Befehl im Container im Detached-Modus ausführen (ohne Warten) | |
| docker container logs | Container-Logs anzeigen | |
| docker logs container | Alle Logs des Containers  | |
| docker logs -f container | Container-Logs in Echtzeit verfolgen | |
| docker logs --tail 50 container | Die letzten 50 Zeilen der Logs anzeigen | |
| docker inspect | Detaillierte JSON-Informationen zu einem Container oder Image abrufen | |
| docker inspect container | Details des Containers  | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' container | Die IP-Adresse des Containers anzeigen | |
| docker container stats | Echtzeit-Statistiken zur Ressourcennutzung von Containern anzeigen | |
| docker stats | CPU-, Speicher-, Netzwerk- und Festplattennutzung für alle Container anzeigen | |
| docker stats container_name | Nur Statistiken für einen bestimmten Container anzeigen | |
| docker stats --no-stream | Einmalige Momentaufnahme der Statistiken anzeigen und beenden | |
| docker container rename | Einen Container umbenennen | |
| docker rename old_name new_name | Container von  | |
| docker container cp | Dateien zwischen einem Container und dem Host kopieren | |
| docker cp container:/src/file.txt ./file.txt | Eine Datei vom Container in das aktuelle Host-Verzeichnis kopieren | |
| docker cp ./config.yaml container:/app/config.yaml | Eine Datei vom Host in den Container kopieren | |
| docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR" | Eine Logdatei aus dem Container streamen und Zeilen mit “ERROR” filtern, ohne auf Platte zu speichern | |
| docker container top | Laufende Prozesse in einem Container anzeigen | |
| docker top container | Prozesse des Containers  | |
| docker container pause | Alle Prozesse in einem Container anhalten | |
| docker pause container | Den Container  | |
| docker container unpause | Einen angehaltenen Container fortsetzen | |
| docker unpause container | Den Container  | |
| docker container update | Container-Einstellungen ohne Neustart aktualisieren | |
| docker update --memory 500m container | Den Speicherverbrauch des Containers auf 500 MB begrenzen | 
🧱 Images und Dockerfile
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker buildx build | Ein Docker-Image aus einem Dockerfile erstellen | |
| docker build -t my_image . | Ein Image mit Tag  | |
| docker build -t my_image:1.0 . | Ein Image mit Tag  | |
| docker build --no-cache -t my_image . | Ein Image ohne Cache für einen sauberen Build erstellen | |
| docker container commit | Ein Image aus dem aktuellen Zustand eines Containers erstellen | |
| docker commit container my_img:v1 | Image  | |
| docker commit -m "Added config" container my_img:v2 | Ein Image mit Commit-Nachricht erstellen | |
| docker commit -a "John Doe" container my_img:latest | Ein Image mit Angabe des Autors erstellen | |
| docker image tag | Einen Image-Tag hinzufügen oder ändern | |
| docker tag my_image myrepo/my_image:latest | Einen Tag zum Push in die Registry  | |
| docker tag my_image:1.0 my_image:stable | Tag  | |
| docker tag my_image my_image:backup | Einen  | |
| docker image push | Ein Image zu Docker Hub oder einer anderen Registry hochladen | |
| docker push myrepo/my_image:latest | Image mit Tag  | |
| docker push myrepo/my_image:1.0 | Image mit Tag  | |
| docker push myrepo/my_image | Image mit Standard-Tag  | |
| docker login | Bei Docker Hub oder einer anderen Registry authentifizieren | |
| docker login | Benutzername und Passwort interaktiv für Docker Hub eingeben | |
| docker login myregistry.local:5000 | Bei einer privaten Registry anmelden | |
| docker login -u username -p password | Login mit Benutzername und Passwort (nicht empfohlen) | |
| docker logout | Von Docker Hub oder einer anderen Registry abmelden | |
| docker logout | Von Docker Hub abmelden | |
| docker logout myregistry.local:5000 | Von privater Registry abmelden | |
| HEALTHCHECK | Dockerfile-Anweisung zur automatischen Überprüfung des Container-Gesundheitsstatus | |
| HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1 | Healthcheck hinzufügen, um die Dienstverfügbarkeit alle 30 Sekunden zu prüfen | |
| docker inspect --format='{{json .State.Health}}' container_name | Den Healthcheck-Status eines laufenden Containers prüfen | 
🔌 Netzwerke und Volumes
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker network ls | Alle Docker-Netzwerke auflisten | |
| docker network ls | Alle erstellten Docker-Netzwerke anzeigen | |
| docker network ls --filter driver=bridge | Nur Netzwerke mit dem Treiber  | |
| docker network ls --format '{{.Name}}' | Nur Netzwerknamen anzeigen | |
| docker network create | Ein neues Docker-Netzwerk erstellen | |
| docker network create my_net | Ein Netzwerk  | |
| docker network create --driver bridge my_bridge_net | Ein Netzwerk mit dem Treiber  | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | Ein Netzwerk mit einem angegebenen Subnetz erstellen | |
| docker network connect | Einen Container mit einem Netzwerk verbinden | |
| docker network connect my_net container | Container  | |
| docker network connect --alias db_net my_net container | Mit Alias  | |
| docker network disconnect | Einen Container von einem Netzwerk trennen | |
| docker network disconnect my_net container | Container  | |
| docker volume ls | Alle Docker-Volumes auflisten | |
| docker volume ls | Alle Docker-Volumes anzeigen | |
| docker volume ls --filter dangling=true | Nicht verwendete Volumes anzeigen | |
| docker volume create | Ein neues Docker-Volume erstellen | |
| docker volume create my_vol | Ein Volume mit Namen  | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | Ein temporäres Volume mit tmpfs erstellen | |
| docker volume inspect | Detaillierte Informationen über ein Volume anzeigen | |
| docker volume inspect my_vol | Details des Volumes  | |
| docker volume rm | Ein oder mehrere Volumes entfernen | |
| docker volume rm my_vol | Volume  | |
| docker volume rm $(docker volume ls -qf dangling=true) | Alle ungenutzten Volumes entfernen | 
🧩 Docker-Plugins
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker plugin ls | Installierte Docker-Plugins auflisten | |
| docker plugin ls | Alle Plugins und deren Status anzeigen | |
| docker plugin install | Ein Docker-Plugin aus einer Registry installieren | |
| docker plugin install vieux/sshfs | Das SSHFS-Volume-Plugin installieren | |
| docker plugin install store/weaveworks/net-plugin:latest_release | Das Weave-Netzwerk-Plugin installieren | |
| docker plugin disable | Ein installiertes Plugin deaktivieren | |
| docker plugin disable vieux/sshfs | Das SSHFS-Plugin deaktivieren | |
| docker plugin enable | Ein zuvor deaktiviertes Plugin aktivieren | |
| docker plugin enable vieux/sshfs | Das SSHFS-Plugin aktivieren | |
| docker plugin rm | Ein Docker-Plugin entfernen | |
| docker plugin rm vieux/sshfs | Das SSHFS-Plugin entfernen | 
📋 Docker Compose
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker compose up | Container starten, die in docker-compose.ymldefiniert sind | |
| docker compose up | Alle Dienste im aktuellen Verzeichnis im interaktiven Modus starten | |
| docker compose up -d | Dienste im Detached-Modus (Hintergrund) starten | |
| docker compose up --build | Images vor dem Start der Dienste bauen | |
| docker compose down | Container, Netzwerke und Volumes stoppen und entfernen, die durch uperstellt wurden | |
| docker compose down | Alle laufenden Dienste stoppen und zugehörige Ressourcen entfernen | |
| docker compose down --volumes | Zusätzlich Volumes entfernen, die von Compose erstellt wurden | |
| docker compose down --rmi all | Zusätzlich Images entfernen, die von Compose erstellt wurden | |
| docker compose logs | Logs aller oder bestimmter Dienste anzeigen | |
| docker compose logs | Logs aller Dienste anzeigen | |
| docker compose logs -f | Logs in Echtzeit verfolgen | |
| docker compose logs web | Nur Logs des Dienstes  | |
| docker compose exec | Einen Befehl in einem laufenden Service-Container ausführen | |
| docker compose exec web bash | Eine interaktive Bash-Shell im  | |
| docker compose exec db ls /var/lib/postgresql | 
 | |
| docker compose exec -d worker touch /tmp/done | Einen Befehl im  | |
| docker compose build | Service-Images bauen oder neu bauen | |
| docker compose build | Alle Images aus  | |
| docker compose build web | Nur das  | |
| docker compose build --no-cache | Images ohne Cache bauen | |
| docker compose ps | Status aller Dienste und Container anzeigen | |
| docker compose ps -a | Alle Container einschließlich gestoppter anzeigen | |
| docker compose ps --services | Nur die Servicenamen anzeigen | |
| docker compose pull | Service-Images aus Registry herunterladen/aktualisieren | |
| docker compose pull web | Nur Image für den Dienst  | |
| docker compose pull --ignore-pull-failures | Trotz Fehlern bei einigen Images fortsetzen | |
| docker compose restart | Alle oder bestimmte Dienste neu starten | |
| docker compose restart db | Nur den Dienst  | |
| docker compose restart -t 10 | Dienste mit 10-Sekunden-Timeout neu starten | |
| docker compose config | Die endgültige Compose-Konfiguration im YAML-Format anzeigen | |
| docker compose config --services | Alle Dienste in der Konfiguration auflisten | |
| docker compose config --volumes | Alle Volumes in der Konfiguration auflisten | |
| docker compose start | Gestoppte Dienste starten, ohne Container neu zu erstellen | |
| docker compose start web | Den Dienst  | |
| docker compose start db api | Mehrere Dienste auf einmal starten | |
| docker compose stop | Dienste stoppen, ohne Container zu entfernen | |
| docker compose stop web | Den Dienst  | |
| docker compose stop -t 5 | Dienste mit 5-Sekunden-Timeout stoppen | 
📤 Export und Import
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker image save | Ein oder mehrere Docker-Images in ein TAR-Archiv speichern für späteren Import oder Transfer | |
| docker save -o image.tar my_img:tag | Ein Docker-Image in eine TAR-Datei speichern | |
| docker save my_image > my_image.tar | Alternative Methode, ein Image in eine Datei zu speichern | |
| docker save -o redis_latest.tar redis:latest | Ein bestimmtes Redis-Image in eine Datei speichern | |
| docker image load | Docker-Images aus einem zuvor gespeicherten TAR-Archiv laden | |
| docker load < image.tar | Ein Docker-Image aus einer TAR-Datei laden | |
| docker load --input redis_latest.tar | Ein Image mit Parameter zur Datei laden | |
| docker load --quiet < my_image.tar | Ein Image ohne Fortschrittsanzeige laden | |
| docker container export | Dateisystem eines Containers als TAR-Archiv exportieren, ohne Image-Historie oder Metadaten | |
| docker export container > file.tar | Container-Dateisystem in ein Archiv exportieren | |
| docker export my_container > my_container_fs.tar | Container nach Name exportieren | |
| docker export -o container_fs.tar container_id | Container nach ID mit dem Flag  | |
| docker image import | Ein neues Image aus einem TAR-Archiv eines Dateisystems erstellen | |
| docker import file.tar new_img | Archivdatei als neues Docker-Image importieren | |
| docker import https://example.com/image.tar my_new_image | Image direkt von einer URL importieren | |
| docker import - my_image < file.tar | Von Standardeingabe importieren | 
🧹 Aufräumen und Diagnose
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker system df | Docker-Speichernutzung anzeigen: Volumes, Images, Container und Build-Cache | |
| docker system df -v | Detaillierte Ausgabe mit Infos zu jedem Image, Container und Volume | |
| docker system df --format '{{json .}}' | Informationen im JSON-Format ausgeben | |
| docker system prune | Alle ungenutzten Docker-Daten entfernen: gestoppte Container, ungenutzte Netzwerke, hängende Images und Build-Cache | |
| docker system prune -a | Unbenutzte Images einschließlich Zwischenschichten entfernen | |
| docker system prune --volumes | Unbenutzte Volumes zusammen mit anderen Ressourcen entfernen | |
| docker image prune | Unbenutzte Docker-Images einschließlich hängender Schichten entfernen | |
| docker image prune -a | Alle unbenutzten Images einschließlich hängender entfernen | |
| docker image prune --filter "until=24h" | Images entfernen, die älter als 24 Stunden sind | |
| docker container prune | Gestoppte Container entfernen, die Filtern entsprechen, oder alle, falls keine angegeben | |
| docker container prune --filter "until=24h" | Gestoppte Container entfernen, die älter als 24 Stunden sind | |
| docker container prune --force | Ohne Bestätigung entfernen | 
🐝 Docker Swarm
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker swarm init | Einen neuen Docker-Swarm-Cluster auf dem aktuellen Knoten initialisieren | |
| docker swarm init --advertise-addr 192.168.1.100 | Cluster initialisieren und IP-Adresse angeben | |
| docker swarm init --listen-addr 0.0.0.0:2377 | Mit angegebenem Listen-Port initialisieren | |
| docker service create | Einen neuen Dienst im Swarm-Cluster erstellen | |
| docker service create --name nginx nginx | Einen Nginx-Dienst im Swarm erstellen | |
| docker service create --replicas 3 --name web webserver | Einen Dienst mit 3 Replikaten erstellen | |
| docker service create --name redis --publish 6379:6379 redis | Einen Dienst mit Port-Mapping erstellen | |
| docker stack deploy | Einen Stack von Diensten im Swarm-Cluster anhand einer Compose-Datei bereitstellen | |
| docker stack deploy -c docker-compose.yml mystack | Stack aus Compose-Datei bereitstellen | |
| docker stack deploy --with-registry-auth -c compose.yml mystack | Mit Weitergabe der Registry-Authentifizierung bereitstellen | |
| docker stack deploy -c swarm-compose.yml mystack | Eine alternative Compose-Datei für den Stack verwenden | |
| docker stack rm | Einen oder mehrere Stacks aus dem Swarm-Cluster entfernen | |
| docker stack rm mystack | Den Stack  | |
| docker stack rm | Alle Stacks entfernen (nicht empfohlen) | |
| docker stack rm mystack && docker swarm leave --force | Stack entfernen und Swarm verlassen | 
💼 Erweiterte Docker-Nutzung
🚀 Professionelle Docker-Befehle
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker buildx | Erweitertes Image-Build-Tool als Ersatz für docker build. Unterstützt Multi-Plattform, Caching, parallele Builds und Export in verschiedene Formate. Nützlich für CI/CD und plattformübergreifende Entwicklung | |
| docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi . | Ein Multi-Plattform-Image bauen (ARM und x86 gleichzeitig) | |
| docker buildx build --load -t localimg . | Ein Image bauen und in den lokalen Docker-Engine-Cache laden | |
| docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest . | Ein Multi-Plattform-Image bauen und in eine Registry pushen | |
| docker context | Docker-Kontexte für Remote- oder Multi-Umgebungen verwalten. Ermöglicht schnelles Umschalten zwischen lokaler und entfernter Docker-Engine | |
| docker context create myremote --docker "host=ssh://user@host" | Einen Kontext zum Verbinden mit einem Remote-Docker-Host erstellen | |
| docker context use myremote | Zum Remote-Kontext wechseln | |
| docker context ls | Verfügbare Kontexte und den aktiven auflisten | |
| docker system events | Docker-Ereignisse in Echtzeit überwachen, gefiltert nach Ereignistyp (z. B. Container-Start). Nützlich für Monitoring und Automatisierung | |
| docker events --filter 'event=start' | Nur Container-Start-Ereignisse anzeigen | |
| docker events --since 1h --until 10m | Ereignisse der letzten Stunde bis vor 10 Minuten anzeigen | |
| docker events --filter 'type=network' | Nur netzwerkbezogene Ereignisse anzeigen | |
| docker events --filter 'image=nginx' | Ereignisse zum Image  | |
| docker container update | Ressourcenlimits und Einstellungen eines laufenden Containers ändern, ohne ihn neu zu starten | |
| docker update --cpus 2 --memory 1g my_container | Limit auf 2 CPUs und 1 GB RAM setzen | |
| docker update --restart unless-stopped my_container | Auto-Restart-Policy auf  | |
| docker update --pids-limit 200 my_container | Die Anzahl der Prozesse auf 200 begrenzen | |
| docker container diff | Dateisystemänderungen in einem Container im Vergleich zu seinem ursprünglichen Image anzeigen. Nützlich für Debugging und Audits | |
| docker diff my_container | Alle Dateisystemänderungen im Container anzeigen | |
| docker diff my_container | grep '^A' | Nur hinzugefügte Dateien anzeigen ( | |
| docker image history | Verlauf der Image-Layer anzeigen: Build-Befehle, Größe jeder Schicht und Erstellungszeit. Nützlich für Optimierung und Audits | |
| docker history my_image | Layer-Historie eines Images anzeigen | |
| docker history --no-trunc my_image | Vollständige Build-Befehle ohne Kürzung anzeigen | |
| docker history --format "{{.CreatedBy}}: {{.Size}}" my_image | Nur Build-Befehle und Layer-Größen ausgeben | 
🛠 Nützliche Docker-Praktiken und Automatisierung
- Image-Größe minimieren 
 Basis-Images wie- alpineoder- scratchfür minimale Größe verwenden.
 Um Layer zusammenzuführen, kann- --squashbeim Build genutzt werden (erfordert aktivierte experimentelle Features).
 Auch temporäre Dateien und Caches in einer einzigen Schicht entfernen:- RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
- Anzahl der Layer minimieren 
 Befehle in einem- RUNkombinieren, um die Anzahl der Layer und die finale Image-Größe zu reduzieren:- RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
- Dockerfile-Build optimieren 
 Multi-Stage-Builds verwenden, sodass nur notwendige Dateien im finalen Image verbleiben.
 Zuerst Abhängigkeiten kopieren und installieren, dann Code — verbessert Layer-Caching und beschleunigt Rebuilds.
- Secrets und Konfigurationen trennen 
 Keine- .env-Dateien, API-Keys oder privaten Zertifikate im Image speichern.
 Für Konfiguration verwenden:- docker secret(in Swarm)
 
- Umgebungsvariablen (-e VAR=Wertoder.env)
 
- Externe Volumes für Konfigurationen 
 
- Build-Zeit-Secrets (BuildKit) 
 Für sicheres Übergeben von Secrets während des Builds das Flag- --secretverwenden:- docker buildx build --secret id=mysecret,src=./secret.txt .- Im Dockerfile ist das Secret unter - /run/secrets/mysecretverfügbar:- RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret- 🛡 Dadurch werden Secrets nicht in Image-Layern gespeichert. 
- Rootless Docker 
 Docker ohne Root-Rechte auszuführen verbessert die Sicherheit und reduziert das Risiko für den Host.
 Zum Aktivieren:- dockerd-rootless-setuptool.sh install export PATH=/usr/bin:$PATH- Überprüfen: - docker info | grep Rootless- ⚠ Einige Features (z. B. Portweiterleitung <1024) sind nicht verfügbar. 
- Images auf Schwachstellen scannen 
 Eingebaute Tools verwenden:- docker scan my_image- Oder das neue CLI: - docker scout cves my_image- Hilft, Schwachstellen in Basis-Images und Abhängigkeiten zu erkennen. 
- Ressourcennutzung überwachen 
 Container nach Speicher, CPU und Prozessanzahl begrenzen:- docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage- Dies verhindert übermäßigen Ressourcenverbrauch. 
 Man kann auch I/O begrenzen:- docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage- Nützlich für Container, die das Subsystem nicht überlasten sollen. 
- Automatisches Aufräumen 
 Regelmäßig unbenutzte Images, Container, Volumes und Netzwerke entfernen:- docker system prune -af --volumes- ⚠ Vorsicht: Dieser Befehl löscht alle unbenutzten Ressourcen. - Für selektives Aufräumen verwenden: - docker image prune --filter "until=24h"
- CI/CD-Integration 
 Build, Tests und Deployment in GitHub Actions, GitLab CI, Jenkins-Pipelines einbetten.
 Beispiel GitHub Actions Schritt:- - run: docker build -t myapp:${GITHUB_SHA} . - run: docker push myapp:${GITHUB_SHA}
- Logging und Monitoring 
 Logging-Driver (- --log-driver) an zentrale Systeme wie ELK, Loki, Splunk anhängen.
 Prometheus + cAdvisor für Container-Metriken verwenden.
- Produktivbereitstellung 
 Getrennte Konfigurationen für Entwicklung und Produktion mit- docker-compose.override.yml.
 Für Hochverfügbarkeit und Skalierung verwenden:- Docker Swarm
 
- Kubernetes 
 
- Docker Swarm
🐞 Debugging und Profiling von Docker-Containern
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker container exec | Führt einen Befehl in einem laufenden Container aus und ermöglicht interaktiven Zugriff oder das Ausführen von Prozessen in der isolierten Umgebung des Containers | |
| docker exec -it my_container bash | Ein interaktives Terminal (bash) in einem laufenden Container starten | |
| docker exec -it my_container sh | Eine minimale Shell im Container starten (falls bash nicht verfügbar ist) | |
| docker exec my_container ls /app | Einen Befehl im Container ohne interaktiven Modus ausführen | |
| docker container logs | Zeigt Logs des angegebenen Containers an, um Ausgaben und Ereignisse zur Diagnose und Überwachung einzusehen | |
| docker logs -f --tail 100 my_container | Die letzten 100 Zeilen der Logs mit Live-Streaming anzeigen | |
| docker logs my_container | Alle verfügbaren Logs des Containers anzeigen | |
| docker logs --since 1h my_container | Logs der letzten Stunde anzeigen | |
| docker inspect | Gibt detaillierte Informationen zu einem Docker-Objekt (Container, Image, Netzwerk usw.) im JSON-Format aus, einschließlich Konfiguration und Status | |
| docker inspect my_container | Vollständige JSON-Infos zum Container abrufen | |
| docker inspect --format '{{.State.Pid}}' my_container | Die PID des Hauptprozesses des Containers auf dem Host abrufen | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container | Die IP-Adresse des Containers anzeigen | |
| nsenter(withstrace) | Linux-Tool zum Betreten der Namespaces eines anderen Prozesses (hier des Containers). Wird mit straceverwendet, um Systemaufrufe im Container zum Debugging nachzuverfolgen | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1 | Container-Namespaces betreten und Systemaufrufe des Prozesses 1 nachverfolgen | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash | Eine Bash-Shell innerhalb der Container-Namespaces öffnen | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp | Offene Ports im Container anzeigen | |
| tcpdump(inside container) | Konsolentool zum Erfassen und Analysieren von Netzwerkverkehr. Wird im Container verwendet, um Netzwerkprobleme zu diagnostizieren, Pakete zu analysieren und Verbindungen zu überwachen | |
| docker exec -it my_container tcpdump -i any | Netzwerkverkehr im Container erfassen und analysieren | |
| docker exec -it my_container tcpdump -nn port 80 | Nur Verkehr auf Port 80 erfassen | |
| docker exec -it my_container tcpdump -w /tmp/dump.pcap | Verkehr in Datei speichern zur späteren Analyse | |
| docker container stats | Zeigt aktuelle Ressourcennutzungsmetriken (CPU, Speicher, Netzwerk, Festplatte) für einen oder mehrere Container in Echtzeit | |
| docker stats my_container | Echtzeit-Auslastung von CPU, Speicher, Netzwerk und Festplatte des Containers anzeigen | |
| docker stats | Statistiken für alle Container anzeigen | |
| docker stats --no-stream | Statistiken einmalig ausgeben und beenden | |
| docker container top | Zeigt die Liste der im Container laufenden Prozesse, ähnlich wie psin Linux, um Container-Aktivität zu analysieren | |
| docker top my_container | Prozesse im Container anzeigen | |
| docker top my_container aux | Alternatives Ausgabeformat wie  | |
| docker top my_container -eo pid,cmd | Nur PID und Befehl der Prozesse anzeigen | |
| docker diff | Zeigt Änderungen im Dateisystem des Containers im Vergleich zum Basis-Image, einschließlich hinzugefügter, geänderter oder gelöschter Dateien | |
| docker diff my_container | Dateisystemänderungen im Container im Vergleich zum Basis-Image anzeigen | |
| docker diff my_container | grep '^A' | Nur hinzugefügte Dateien anzeigen ( | |
| docker diff my_container | grep '^C' | Nur geänderte Dateien anzeigen ( | |
| docker cp | Kopiert Dateien und Verzeichnisse zwischen Container und Host, ermöglicht Datenaustausch und Backups | |
| — | — | — | 
| docker cp my_container:/path/to/file ./file | Datei vom Container zum Host kopieren | |
| docker cp ./config.yaml my_container:/app/config.yaml | Datei vom Host in den Container kopieren | |
| docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR" | Logdatei kopieren und Fehlerzeilen filtern, ohne sie auf Platte zu speichern | 
💡 Für erweitertes Debugging können
nsenter,strace,tcpdump,gdbund andere Low-Level-Tools verwendet werden.
💼 Erweiterte Nutzung von Docker Compose
🚀 Professionelle Docker-Compose-Befehle
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker compose up | Startet und verwaltet den Lebenszyklus bestimmter Dienste aus der docker-compose.yml-Datei mit der Möglichkeit, im Hintergrund zu laufen | |
| docker compose up -d web db | Nur die Dienste  | |
| docker compose up --build | Images vor dem Start der Dienste neu bauen | |
| docker compose up --remove-orphans | Container entfernen, die nicht in der aktuellen Compose-Datei definiert sind | |
| docker compose build | Images für Dienste gemäß Compose-Datei bauen mit Cache-Kontrolle und Parallelität | |
| docker compose build --no-cache | Images vollständig neu bauen, ohne Cache zu verwenden | |
| docker compose build --parallel | Alle Dienste gleichzeitig bauen, um den Prozess zu beschleunigen | |
| docker compose build web | Nur das Image des Dienstes  | |
| docker compose pull | Neueste Versionen von Images aus der Registry für alle oder bestimmte Dienste herunterladen | |
| docker compose pull | Images für alle Dienste herunterladen | |
| docker compose pull db | Nur das Image für den Dienst  | |
| docker compose pull --ignore-pull-failures | Fortsetzen, auch wenn Fehler beim Herunterladen auftreten | |
| docker compose restart | Alle oder bestimmte Dienste neu starten, ohne Container neu zu erstellen | |
| docker compose restart | Alle Dienste im aktuellen Projekt neu starten | |
| docker compose restart worker | Nur den Dienst  | |
| docker compose restart web db | Mehrere Dienste gleichzeitig neu starten | |
| docker compose exec | Einen Befehl in einem laufenden Service-Container ausführen, mit optionalem interaktivem Modus | |
| docker compose exec db psql -U user -d database | psql im  | |
| docker compose exec web sh | Eine Shell im  | |
| docker compose exec api curl http://localhost:8080 | curl-Anfrage aus dem  | |
| docker compose config | Die endgültige Compose-Konfiguration ausgeben unter Berücksichtigung aller Dateien und Umgebungsvariablen | |
| docker compose config | Zusammengeführte Konfiguration im YAML-Format anzeigen | |
| docker compose config --services | Alle Dienste auflisten | |
| docker compose config --environment | Alle von Diensten verwendeten Umgebungsvariablen anzeigen | |
| docker compose watch | Dienste bei Quellcode-Änderungen automatisch neu starten, nützlich für Entwicklung | |
| docker compose watch | Dateien überwachen und Dienste bei Änderungen neu starten | |
| docker compose events | Compose-Ereignisse streamen: Dienststart, -stopp, -aktualisierung | |
| docker compose events --json | Ereignisse im JSON-Format empfangen | |
| docker compose rm | Gestoppte Service-Container entfernen | |
| docker compose rm web db | Container der Dienste  | |
| docker compose pause | Dienstbetrieb pausieren | |
| docker compose pause api | Den Dienst  | |
| docker compose unpause | Pausierte Dienste fortsetzen | |
| docker compose unpause api | Den Dienst  | |
| docker compose create | Container erstellen, ohne sie zu starten | |
| docker compose create web db | Container für  | |
| docker compose images | Liste der von Diensten verwendeten Images anzeigen | |
| docker compose images | Images aller Dienste anzeigen | |
| docker compose top | Prozesse innerhalb von Service-Containern anzeigen | |
| docker compose top web | Prozesse in Containern des Dienstes  | 
🛠 Nützliche Praktiken und Automatisierung mit Docker Compose
- Trennung von Umgebungen 
 Separate- docker-compose.override.yml-Dateien für verschiedene Umgebungen verwenden —- development,- staging,- production. Dies hilft, Konfigurationen zu isolieren und Konflikte zu vermeiden.
 Mehrere Konfigurationsdateien mit dem Flag- -fkombinieren:- docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d- Unterschiedliche - .env-Dateien (- .env.dev,- .env.produsw.) für die Verwaltung von Umgebungsvariablen verwenden.
- Sichere Speicherung von Secrets 
 Keine sensiblen Daten (Passwörter, Tokens) direkt in Compose-Dateien einfügen. Stattdessen verwenden:- .env-Dateien für Umgebungsvariablen (nicht verschlüsselt, nicht in öffentliche Repos commiten)
 
- docker secretund- docker configfür sichere Verwaltung von Secrets und Konfigurationen in Docker Swarm
 
- Externe Volumes für Konfigurationsdateien mit Secrets
 
- Externe Secret-Management-Systeme (z. B. HashiCorp Vault, AWS Secrets Manager) 
 
- Startreihenfolge mit - depends_onund- healthcheck
 Dienste warten lassen, bis Abhängigkeiten bereit sind:- services: db: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s retries: 5 api: image: my_api depends_on: db: condition: service_healthy
- Downtime während Updates minimieren 
 Vor dem Aktualisieren der Dienste ausführen:- docker compose pull && docker compose up -d --remove-orphans- Die Option - -dstartet Container im Hintergrund, und- --remove-orphansentfernt Container, die nicht in aktuellen Konfigurationen definiert sind.
 Zum vollständigen Stoppen und Entfernen alter Container falls nötig:- docker compose down --remove-orphans- Stellt sicher, dass frische Images geladen und ungenutzte Container ohne Ausfallzeit entfernt werden. 
- Hot Code Reloading für Entwicklung 
 - volumesverwenden, um lokale Verzeichnisse in Container einzubinden. Änderungen am Code wirken sofort, ohne Images neu zu bauen.
 Dateiberechtigungen und Filesystem-Caching (besonders unter Windows und macOS) beachten, um Performance-Probleme zu vermeiden.
- Hot Code Reloading ohne Volumes (Compose 2.22+) - develop: watch: - path: ./src action: sync target: /app
- Zentralisiertes Logging von Diensten 
 Container-Logs an Monitoring- und Logsysteme wie ELK Stack, Loki, Prometheus, Fluentd weiterleiten.
 Docker-Logging-Treiber (- --log-driver) aktivieren, um zentrale Log-Sammlung zu ermöglichen.
 Logging-Treiber in Compose-Dateien für Container konfigurieren:- services: api: image: my_api logging: driver: "json-file" options: max-size: "10m" max-file: "3"
- Automatischer Neustart von Diensten 
 Restart-Policy in- docker-compose.ymlkonfigurieren:- restart: unless-stopped- Andere Restart-Policies sind: - no— kein automatischer Neustart (Standard)
 
- always— Container immer neu starten
 
- on-failure— nur bei Fehlern neu starten (optional mit Wiederholungsanzahl)
 - In Produktion ist - unless-stoppeddie beste Wahl, um Dienststabilität sicherzustellen.
 Ermöglicht automatische Wiederherstellung nach Fehlern oder Host-Neustarts.
- Service-Profile 
 Nur bestimmte Gruppen von Diensten starten:- services: db: image: postgres profiles: ["backend"] web: image: nginx profiles: ["frontend"]- Nur das Frontend-Profil starten: - docker compose --profile frontend up
🐞 Debugging und Profiling von Diensten in Docker Compose
| Befehl | Beispiel | Beschreibung | 
|---|---|---|
| docker compose exec | Einen Befehl in einem laufenden Dienst ausführen, mit Zugriff auf Container oder einzelnen Prozessen | |
| docker compose exec web sh | Eine Shell im  | |
| docker compose exec db psql -U user -d database | Den psql-Befehl im  | |
| docker compose logs | Service-Logs zur Diagnose und Überwachung anzeigen | |
| docker compose logs -f db | Logs des Dienstes  | |
| docker compose logs --tail=50 api | Die letzten 50 Zeilen der Logs des Dienstes  | |
| docker compose logs --since=1h web | Logs der letzten Stunde des Dienstes  | |
| docker inspect | Detaillierte Informationen über den Container eines Dienstes anzeigen | |
| docker inspect $(docker compose ps -q web) | JSON mit detaillierten Infos über den  | |
| docker container stats | Ressourcennutzung von Containern eines Dienstes überwachen | |
| docker stats $(docker compose ps -q worker) | CPU, Speicher und andere Ressourcennutzung des  | |
| docker compose run --rm | Einen temporären Container mit den Einstellungen eines Dienstes starten, nützlich für Debugging | |
| docker compose run --rm web sh | Einen einmaligen Container für den Dienst  | |
| docker container cp | Dateien zwischen Host und Container kopieren | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | Eine Datei aus dem  | 
💡 Für komfortables Debugging komplexer Multi-Service-Setups
docker compose run --rmverwenden, um einzelne Container mit notwendigen Netzwerken und Volumes zu starten, ohne Hauptdienste zu beeinflussen.
📚 Zusätzliche Ressourcen
🚫 Dateien mit .dockerignore ignorieren
Dateien und Ordner in .dockerignore eintragen, die nicht im Image enthalten sein sollen, um die Größe zu reduzieren und den Build zu beschleunigen:
node_modules/
*.log
.env⚡ Befehle mit Aliassen vereinfachen
Aliasse für häufig genutzte Befehle erstellen, um sie schneller auszuführen:
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"🧠 Tipp: Docker-Nutzung
- Nicht alles auswendig lernen — docker --helpoderdocker <Befehl> --helpnutzen, um Befehle zu erkunden.
 
- Regelmäßig üben und mit kleinen Projekten experimentieren.
 
- Auf Image-Größen achten und unnötige Dateien mit - .dockerignoreausschließen.
🌐 Nützliche Links
📘 Offizielle Docker-Dokumentation — umfassende Anleitungen und Referenzen zu allen Docker-Themen:
https://docs.docker.com/
📙 Docker Cheat Sheet — vollständiges offizielles Docker-Spickzettel:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — Images und Registries:
https://hub.docker.com/