🐳 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.yml definiert 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 up erstellt 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 wiealpineoderscratchfü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 einemRUNkombinieren, 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_imageOder das neue CLI:
docker scout cves my_imageHilft, 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 myimageDies verhindert übermäßigen Ressourcenverbrauch.
Man kann auch I/O begrenzen:docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimageNü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 mitdocker-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 (with strace) |
Linux-Tool zum Betreten der Namespaces eines anderen Prozesses (hier des Containers). Wird mit strace verwendet, 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 ps in 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
Separatedocker-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 -dUnterschiedliche
.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 secretunddocker 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_onundhealthcheck
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_healthyDowntime während Updates minimieren
Vor dem Aktualisieren der Dienste ausführen:docker compose pull && docker compose up -d --remove-orphansDie 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-orphansStellt 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: /appZentralisiertes 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 indocker-compose.ymlkonfigurieren:restart: unless-stoppedAndere 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/