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