🖥️ PLFK Linux & Docker Command Wiki
Willkommen im umfassenden Command-Wiki der Berufsschule 1 Ansbach.
Hier findest du alle wichtigen Linux- und Docker-Befehle aus dem Lernfeld Systemintegration.
Projektteam: Kevin Zahner-Rimmel, Phillip Scheiderer, Fabian Schlesier, Luis Dorsch
Zeitraum: Oktober – Dezember 2024
📑 Inhaltsverzeichnis
🐳 Docker
🐧 Linux
🐳 Docker Container Management
Container sind isolierte Laufzeitumgebungen für Anwendungen. Sie enthalten alles, was die Anwendung zum Laufen braucht.
Container erstellen und starten
Einfachen Container starten:
docker run nginx
Startet einen Container mit dem nginx-Image im Vordergrund. Der Terminal bleibt dabei blockiert.
Container im Hintergrund (detached mode):
docker run -d nginx
-d = detached mode. Container läuft im Hintergrund, Terminal ist sofort wieder frei. Gibt Container-ID zurück.
Container mit eigenem Namen:
docker run -d --name mein-webserver nginx
--name vergibt einen sprechenden Namen. Ohne diese Option generiert Docker zufällige Namen wie „hungry_einstein“.
Port-Mapping (Portweiterleitung):
docker run -d -p 8080:80 --name webserver nginx
-p 8080:80 leitet Host-Port 8080 auf Container-Port 80 weiter. Format: HOST:CONTAINER. Danach ist nginx unter localhost:8080 erreichbar.
Umgebungsvariablen setzen:
docker run -d --name db \
-e MYSQL_ROOT_PASSWORD=geheim \
-e MYSQL_DATABASE=myapp \
mysql:8.0
-e setzt Umgebungsvariablen im Container. Wichtig für Konfiguration von Datenbanken, Apps etc.
Volume mounten (Datenpersistenz):
docker run -d --name wordpress \
-v ./data:/var/www/html \
-p 8080:80 \
wordpress:latest
-v ./data:/var/www/html mountet lokales Verzeichnis in Container. Daten überleben Container-Löschung.
Interaktiver Container mit Terminal:
docker run -it ubuntu bash
-i = interactive (interaktiv), -t = tty (Terminal zuweisen). Startet bash-Shell im Container.
Container automatisch löschen nach Beendigung:
docker run --rm -it ubuntu bash
--rm löscht Container automatisch nach dem Stoppen. Nützlich für temporäre Test-Container.
Container automatisch neustarten:
docker run -d --restart unless-stopped --name webserver nginx
--restart unless-stopped startet Container nach Host-Neustart automatisch neu. Optionen: no, on-failure, always, unless-stopped.
Container auflisten und inspizieren
Laufende Container:
docker ps
Zeigt nur aktuell laufende Container mit ID, Image, Command, Ports, Status und Namen.
Alle Container (inkl. gestoppte):
docker ps -a
-a = all. Zeigt auch gestoppte Container. Wichtig um zu sehen welche Container noch existieren.
Nur Container-IDs anzeigen:
docker ps -q
-q = quiet. Nur IDs, keine weitere Info. Nützlich für Scripts die mit allen Containern arbeiten.
Letzte X Container:
docker ps -n 5
Zeigt nur die letzten 5 erstellten Container (laufend oder gestoppt).
Container-Details anzeigen:
docker inspect webserver
Gibt alle Details im JSON-Format: IP-Adresse, Volumes, Environment-Variables, Netzwerk, etc.
Spezifischen Wert aus inspect extrahieren:
# IP-Adresse
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' webserver
# Status
docker inspect -f '{{.State.Status}}' webserver
-f = format. Go-Template-Syntax zum Extrahieren spezifischer Werte.
Ressourcen-Verbrauch in Echtzeit:
docker stats
Live-Anzeige von CPU, RAM, Netzwerk und Disk I/O für alle laufenden Container. Mit CTRL+C beenden.
Stats für spezifischen Container:
docker stats webserver
Container steuern
Container stoppen:
docker stop webserver
Sendet SIGTERM, wartet 10 Sekunden, dann SIGKILL. „Graceful Shutdown“ – Anwendung kann aufräumen.
Container mit Timeout stoppen:
docker stop -t 30 webserver
-t 30 wartet 30 Sekunden statt 10 bevor SIGKILL gesendet wird. Für langsame Shutdowns.
Container sofort beenden (kill):
docker kill webserver
⚠️ Sendet sofort SIGKILL. Keine Aufräumarbeiten, Daten könnten korrupt werden. Nur im Notfall!
Container starten (bereits existierend):
docker start webserver
Startet gestoppten Container mit allen ursprünglichen Parametern neu.
Container neu starten:
docker restart webserver
Entspricht: stop + start. Behält alle Konfigurationen bei.
Container pausieren/fortsetzen:
# Pausieren (friert Prozesse ein)
docker pause webserver
# Fortsetzen
docker unpause webserver
Pause friert alle Prozesse mit SIGSTOP ein, ohne Container zu stoppen. Sehr schnell, Netzwerk-Connections bleiben bestehen.
Container löschen
Einzelnen Container löschen:
docker rm webserver
⚠️ Container muss vorher gestoppt sein! Fehler wenn Container noch läuft.
Laufenden Container sofort löschen:
docker rm -f webserver
-f = force. Stoppt und löscht in einem Schritt.
Container inkl. Volumes löschen:
docker rm -v webserver
-v löscht auch anonyme Volumes des Containers. Named Volumes bleiben erhalten.
Mehrere Container löschen:
docker rm webserver db cache
Alle gestoppten Container löschen:
docker container prune
Räumt auf. Fragt vorher nach Bestätigung. Löscht nur gestoppte Container.
Alle Container stoppen und löschen:
# Alle stoppen
docker stop $(docker ps -q)
# Alle löschen
docker rm $(docker ps -aq)
⚠️⚠️ Kombiniert: Stoppt und löscht ALLE Container auf dem System!
Container-Logs und Debugging
Logs anzeigen:
docker logs webserver
Zeigt stdout und stderr des Containers. Entspricht Console-Output.
Logs live verfolgen:
docker logs -f webserver
-f = follow (wie tail -f). Zeigt laufend neue Log-Einträge. Mit CTRL+C beenden.
Nur letzte X Zeilen:
docker logs --tail 100 webserver
Zeigt nur die letzten 100 Zeilen. Nützlich bei sehr großen Logs.
Logs mit Timestamps:
docker logs -t webserver
-t = timestamps. Zeigt genaue Zeit vor jeder Log-Zeile.
Logs seit bestimmter Zeit:
docker logs --since 30m webserver
docker logs --since 2024-11-28T10:00:00 webserver
Zeigt nur Logs ab bestimmtem Zeitpunkt. Formate: 30m, 2h, 24h oder ISO-Zeitstempel.
In Container einsteigen (bash):
docker exec -it webserver bash
-i = interactive, -t = tty. Öffnet interaktive bash-Shell im laufenden Container. Mit exit verlassen.
Alternative Shell (sh):
docker exec -it webserver sh
Alpine Linux und minimale Images haben oft kein bash, nur sh.
Einzelnen Befehl im Container ausführen:
docker exec webserver ls -la /var/www/html
docker exec webserver cat /etc/nginx/nginx.conf
docker exec webserver ps aux
Führt Befehl aus und zeigt Output, ohne interaktive Shell zu öffnen.
Als root in Container einsteigen:
docker exec -it -u root webserver bash
-u root = user root. Nützlich wenn Container standardmäßig als anderer User läuft.
Dateien aus Container kopieren:
# Aus Container auf Host
docker cp webserver:/etc/nginx/nginx.conf ./nginx.conf
# Von Host in Container
docker cp ./config.php webserver:/var/www/html/
Kopiert Dateien zwischen Host und Container. Funktioniert auch bei gestoppten Containern!
🎯 Docker Image Management
Images sind Read-Only-Templates für Container. Sie enthalten das Betriebssystem, die Anwendung und alle Dependencies.
Images herunterladen
Image pullen (herunterladen):
docker pull nginx
Lädt latest-Tag von Docker Hub. Entspricht nginx:latest.
Spezifische Version pullen:
docker pull nginx:1.25.3
docker pull ubuntu:22.04
docker pull node:18-alpine
Tag = Version. Immer spezifische Versions-Tags in Produktion verwenden, nie latest!
Alle Tags eines Images:
docker pull --all-tags nginx
⚠️ Lädt ALLE verfügbaren Tags. Kann sehr groß werden!
Images auflisten und inspizieren
Alle lokalen Images:
docker images
Zeigt Repository, Tag, Image-ID, Erstellungsdatum und Größe.
Mit vollständiger Image-ID:
docker images --no-trunc
Zeigt komplette 64-Zeichen SHA256-ID statt gekürzter Version.
Nach Repository filtern:
docker images nginx
docker images ubuntu
Nur Image-IDs anzeigen:
docker images -q
-q = quiet. Für Scripts nützlich.
Dangling Images (ungetaggte):
docker images -f dangling=true
Zeigt Images ohne Tag (entstehen z.B. bei Rebuilds). Repository/Tag = <none>.
Image-Details anzeigen:
docker inspect nginx:latest
JSON mit allen Metadaten: Layers, Env-Variables, Exposed Ports, Entrypoint, CMD, etc.
Image-History (Layer-Aufbau):
docker history nginx:latest
Zeigt jeden Layer mit Befehl, Größe und Erstellungsdatum. Nützlich zum Verstehen wie Image gebaut wurde.
Images löschen
Einzelnes Image löschen:
docker rmi nginx:1.24
rmi = remove image. Kann Name:Tag oder Image-ID sein.
Image mit laufenden Containern löschen:
docker rmi -f nginx:1.24
-f = force. ⚠️ Löscht auch wenn Container das Image nutzen. Gefährlich!
Mehrere Images löschen:
docker rmi nginx:1.24 ubuntu:20.04 node:16
Alle ungenutzten Images löschen:
docker image prune
Löscht dangling images (ohne Tag). Fragt vorher nach Bestätigung.
Alle ungenutzten Images inkl. getaggte:
docker image prune -a
-a = all. Löscht ALLE Images die nicht von mindestens einem Container genutzt werden. ⚠️ Gibt viel Platz frei!
Ohne Bestätigung löschen:
docker image prune -a -f
-f = force. Keine Nachfrage. Für Scripts.
Images erstellen (Dockerfile)
Image aus Dockerfile bauen:
docker build -t meine-app:1.0 .
-t = tag (Name und Version). . = Build-Context (aktuelles Verzeichnis mit Dockerfile).
Mit anderem Dockerfile:
docker build -t app:dev -f Dockerfile.dev .
-f = file. Nutzt Dockerfile.dev statt standard Dockerfile.
Build-Arguments übergeben:
docker build -t app:1.0 --build-arg VERSION=1.2.3 .
--build-arg übergibt Variablen an Dockerfile (ARG VERSION im Dockerfile).
Ohne Cache bauen:
docker build --no-cache -t app:1.0 .
--no-cache ignoriert Layer-Cache, baut alles neu. Langsamer aber manchmal notwendig.
Multi-Stage Build Target:
docker build -t app:prod --target production .
--target baut nur bis zu bestimmtem Stage in Multi-Stage-Dockerfile.
Images taggen und pushen
Image taggen:
docker tag meine-app:1.0 meine-app:latest
docker tag meine-app:1.0 user/meine-app:1.0
Erstellt zusätzlichen Tag für existierendes Image. Keine Kopie, nur Referenz!
Image zu Docker Hub pushen:
# Erst einloggen
docker login
# Dann pushen
docker push username/meine-app:1.0
Lädt Image zu Docker Hub hoch. Image muss format username/image:tag haben.
Zu privater Registry pushen:
docker tag meine-app:1.0 registry.example.com/meine-app:1.0
docker push registry.example.com/meine-app:1.0
Image speichern und laden
Image als Tar-Archive speichern:
docker save -o nginx-backup.tar nginx:latest
-o = output. Speichert Image mit allen Layers als .tar-Datei. Gut für Offline-Transfer.
Mehrere Images speichern:
docker save -o images.tar nginx:latest ubuntu:22.04 node:18
Image aus Tar-Archive laden:
docker load -i nginx-backup.tar
-i = input. Lädt Image aus .tar zurück in Docker.
Container als Image speichern:
docker commit webserver meine-app:custom
⚠️ Nicht empfohlen! Erstellt Image aus laufendem Container. Besser: Dockerfile verwenden.
💾 Docker Volumes & Persistenz
Volumes sind der bevorzugte Mechanismus für persistente Daten in Docker. Sie überleben Container-Löschungen.
Volume-Typen verstehen
1. Named Volumes (Docker-verwaltet):
docker volume create mein-volume
docker run -v mein-volume:/data ubuntu
Docker speichert unter /var/lib/docker/volumes/. Ideal für Produktion.
2. Bind Mounts (Host-Verzeichnis):
docker run -v /host/pfad:/container/pfad ubuntu
docker run -v ./data:/data ubuntu
Direkter Mount eines Host-Verzeichnisses. Gut für Entwicklung, Zugriff auf Host-Dateien.
3. Anonymous Volumes:
docker run -v /data ubuntu
Docker generiert zufälligen Namen. Wird mit Container gelöscht wenn –rm verwendet.
Volumes verwalten
Volume erstellen:
docker volume create mein-volume
Mit Driver-Optionen:
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.1.1,rw \
--opt device=:/path/to/dir \
nfs-volume
Erstellt NFS-Volume. Kann auch andere Treiber nutzen (AWS EBS, etc.).
Alle Volumes auflisten:
docker volume ls
Volume-Details anzeigen:
docker volume inspect mein-volume
Zeigt Mountpoint (wo auf Host), Driver, Labels, Größe.
Ungenutzte Volumes löschen:
docker volume prune
Löscht alle Volumes die nicht von Container genutzt werden. ⚠️ Daten sind weg!
Spezifisches Volume löschen:
docker volume rm mein-volume
⚠️ Fehler wenn Volume noch in Benutzung. Erst Container entfernen!
Volumes mit Containern nutzen
Named Volume mounten:
docker run -d --name db \
-v db-data:/var/lib/mysql \
mysql:8.0
Format: volume-name:container-path. Volume wird automatisch erstellt wenn nicht vorhanden.
Read-Only Mount:
docker run -v mein-volume:/data:ro ubuntu
:ro = read-only. Container kann nur lesen, nicht schreiben. Sicherheitsfeature.
Mehrere Volumes:
docker run -d \
-v data:/var/lib/mysql \
-v logs:/var/log \
-v config:/etc/mysql \
mysql:8.0
Bind Mount mit absoluten Pfad:
docker run -v /home/user/projekt:/app ubuntu
Muss absoluter Pfad sein (/pfad/zum/ordner), relativer geht mit $PWD:
docker run -v $(pwd)/data:/app/data ubuntu
Neue –mount Syntax (empfohlen):
# Named Volume
docker run --mount source=mein-volume,target=/data ubuntu
# Bind Mount
docker run --mount type=bind,source=/host/pfad,target=/container/pfad ubuntu
# Mit Optionen
docker run --mount type=bind,source=/host,target=/container,readonly ubuntu
Expliziter und klarer als -v Syntax. Empfohlen für neue Projekte.
Volume Backups
Volume sichern:
docker run --rm \
-v mein-volume:/data \
-v $(pwd):/backup \
ubuntu tar -czf /backup/volume-backup.tar.gz /data
Mountet Volume und Host-Verzeichnis, erstellt Tar-Backup.
Volume wiederherstellen:
docker run --rm \
-v mein-volume:/data \
-v $(pwd):/backup \
ubuntu tar -xzf /backup/volume-backup.tar.gz -C /
Volume von einem Container zu anderem kopieren:
docker run --rm \
--volumes-from alter-container \
-v neues-volume:/backup \
ubuntu cp -a /data /backup
--volumes-from mountet alle Volumes eines anderen Containers.
Letzte Aktualisierung: November 2024 | BS1 Ansbach | Projekt: WordPress-Wiki