Docker 101

Kernkonzepte

Image
Unveränderliche Vorlage (Bauplan) für einen Container. Wird aus einem Dockerfile gebaut.

Container
Laufende Instanz eines Images. Isolierter Prozess mit eigenem Dateisystem, Netzwerk, RAM.

Volume
Persistenter Datenspeicher ausserhalb des Containers. Überlebt Container-Neustart / -Löschung.

Network
Virtuelles Netzwerk. Container im selben Netzwerk erreichen sich per Name (DNS).

Container-Lifecycle

docker run -d -p 8080:80 nginxstartenImage pullen + Container im Hintergrund starten, Port mappen
docker psinfoLaufende Container anzeigen
docker ps -ainfoAlle Container (auch gestoppte)
docker stop <id/name>stoppContainer sauber beenden (SIGTERM → SIGKILL)
docker kill <id/name>stoppSofort beenden (SIGKILL)
docker rm <id/name>löschenGestoppten Container entfernen
docker rm -f <id/name>löschenErzwingen, auch wenn laufend

Logs & Debug

docker logs <id>infoLogs ausgeben
docker logs -f <id>infoLogs live folgen
docker exec -it <id> bashdebugShell im laufenden Container öffnen
docker inspect <id>infoAlle Details als JSON

Images

docker imagesinfoLokale Images auflisten
docker pull nginx:alpineImage herunterladen
docker build -t myapp:1.0 .Image aus aktuellem Verzeichnis bauen
docker rmi <image>löschenImage löschen

Volumes

docker volume lsinfoAlle Volumes auflisten
docker volume inspect <name>infoDetails (Pfad auf Host etc.)
docker volume rm <name>löschenVolume löschen (nur wenn kein Container es nutzt)
docker volume prunelöschenAlle ungenutzten Volumes löschen

Networks

docker network lsinfoAlle Netzwerke auflisten
docker network inspect <name>infoDetails + welche Container drin sind
docker network create <name>erstellenNeues Bridge-Netzwerk erstellen
docker network rm <name>löschenNetzwerk löschen
docker network connect <net> <id>Laufenden Container zu Netzwerk hinzufügen

Aufräumen

docker system prunelöschenGestoppte Container, ungenutzte Images, Netzwerke entfernen
docker system prune -alöschenWie oben + alle nicht verwendeten Images

Docker Compose – wozu?

Ein Tool, das mehrere Container als eine Einheit definiert und startet. Du beschreibst alles in einer docker-compose.yml (Services, Volumes, Netzwerke) und startest alles mit einem Befehl. Ohne Compose müsstest du jeden Container einzeln mit docker run + langen Flags starten, Netzwerke manuell verbinden und bei Neustart alles von Hand wiederholen.

YAML
services:
  wordpress:
    image: wordpress
    ports: ["8080:80"]
    depends_on: [db]
  db:
    image: mariadb
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:
BefehlWas passiert
docker compose up -dAlles starten
docker compose downAlles stoppen + Container entfernen
docker compose down -v+ Volumes löschen
docker compose logs -fLogs aller Services
docker compose psStatus aller Services

docker ps — Kurzreferenz

Bash
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
a1b2c3d4e5f6   nginx              5m ago    Up 5m     0.0.0.0:8080->80/tcp   my_nginx
  • CONTAINER ID — die ersten 12 Zeichen der ID, reicht für alle Befehle
  • STATUSUp = läuft, Exited (0) = sauber gestoppt, Exited (1) = Fehler
  • Du kannst überall die ersten paar ID-Zeichen nehmen: docker stop a1b2

Container beenden — welche Methode?

SituationBefehl
Normaler Stoppdocker stop <id>
Hängt / reagiert nichtdocker kill <id>
Stopp + gleich löschendocker rm -f <id>
Alles via Composedocker compose down

stop gibt dem Prozess 10 Sekunden zum sauberen Beenden, dann SIGKILL. Für WP-Container immer stop bevorzugen.