🖥️ 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 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