Was passiert beim docker run - Schritt für Schritt erklärt

Was passiert beim docker run - Schritt für Schritt erklärt

docker run nginx — drei Worte, aber dahinter steckt eine ganze Kette von Schritten. Wer versteht, was Docker intern tut, debuggt Probleme schneller und trifft bessere Entscheidungen bei Konfiguration und Flags.

Die Schritte im Detail

1. Lokalen Image-Cache prüfen

Zuerst schaut der Daemon nach, ob das angeforderte Image bereits lokal vorhanden ist:

docker images nginx

Ist es nicht vorhanden, geht es weiter zu Schritt 2. Ist es vorhanden, wird Schritt 2 übersprungen.

2. Image aus der Registry pullen

Falls das Image nicht lokal vorliegt, wird es von der konfigurierten Registry geladen — standardmäßig Docker Hub:

Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
Digest: sha256:...
Status: Downloaded newer image for nginx:latest

Layer, die bereits lokal vorhanden sind (z. B. von einem anderen Image mit derselben Basis), werden nicht nochmal heruntergeladen.

3. Container-Layer erstellen

Über das Image-Dateisystem legt Docker einen dünnen, beschreibbaren Container-Layer. Das Image selbst bleibt unberührt — alle Schreibvorgänge des Containers landen in diesem Layer.

4. Netzwerk einrichten

Docker verbindet den Container mit dem konfigurierten Netzwerk. Ohne Angabe ist das bridge — ein privates virtuelles Netzwerk auf dem Host. Dem Container wird eine interne IP zugewiesen, Port-Mappings werden über iptables auf dem Host eingerichtet.

5. Entrypoint und CMD ausführen

Der in ENTRYPOINT und/oder CMD definierte Prozess wird gestartet. Er läuft als PID 1 im Container. Wenn dieser Prozess endet, endet der Container.

Wichtige Flags

# Im Hintergrund starten
docker run -d nginx

# Interaktiv mit Terminal (für Debugging oder Shell-Zugriff)
docker run -it ubuntu bash

# Namen vergeben (sonst zufällig generiert)
docker run --name mein-nginx nginx

# Container nach Beenden automatisch löschen
docker run --rm alpine echo "hallo"

# Port-Mapping: Host-Port 8080 → Container-Port 80
docker run -p 8080:80 nginx

# Umgebungsvariable übergeben
docker run -e APP_ENV=production myapp

docker run vs. docker create + docker start

docker run ist eine Abkürzung für zwei Befehle:

# Äquivalent zu docker run nginx
docker create --name test nginx
docker start test

docker create legt den Container an (Schritte 1–4), docker start führt ihn aus (Schritt 5). Nützlich, wenn man den Container konfigurieren will, bevor er startet.

Häufige Verwirrung: Container stoppt sofort

Ein Container läuft so lange, wie sein Hauptprozess läuft. Wenn der Prozess endet, stoppt der Container — das ist kein Fehler.

# Stoppt sofort: echo endet sofort
docker run ubuntu echo "hallo"

# Läuft dauerhaft: nginx läuft als Daemon
docker run -d nginx