Docker Run meistern: Erläuterung der wichtigsten Befehlsoptionen
Lernen Sie die am häufigsten verwendeten Docker Run-Flags kennen: Ports, Volumes, Umgebungsvariablen, Namen, abgetrennter Modus, Neustartrichtlinien und Bereinigung.
Docker Run meistern: Wichtige Befehlsoptionen erklärt
docker run erstellt einen neuen Container aus einem Image und startet ihn. Der Befehl sieht auf den ersten Blick einfach aus, aber die Optionen bestimmen, wie Ihr Container eine Verbindung zum Netzwerk herstellt, Daten speichert, Konfiguration erhält und sich nach einem Neustart verhält.
Verwenden Sie diesen Leitfaden, wenn Sie das Image kennen, das Sie ausführen möchten, aber die richtigen Flags für ein praktisches Setup benötigen.
Grundlegende Syntax
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
IMAGE ist der Imagename, z. B. nginx oder postgres:16. COMMAND und ARG... sind optional und überschreiben oder erweitern den Standardbefehl des Images.
Für einen schnellen Vordergrundtest:
docker run hello-world
Für echte Dienste fügen Sie normalerweise Optionen hinzu.
Im Hintergrund ausführen mit -d
Standardmäßig hängt Docker Ihr Terminal an die Ausgabe des Containers an. Der abgetrennte Modus führt den Container im Hintergrund aus:
docker run -d nginx
Docker gibt die neue Container-ID aus und gibt Ihre Eingabeaufforderung zurück. Überprüfen Sie es mit:
docker ps
Lesen Sie Protokolle aus einem abgetrennten Container mit:
docker logs <container_id_or_name>
Ports veröffentlichen mit -p
Container haben ihren eigenen Netzwerk-Namespace. Wenn ein Dienst innerhalb des Containers lauscht, veröffentlichen Sie den Port, um ihn von Ihrem Host aus zu erreichen:
docker run -d -p 8080:80 nginx
Dies ordnet den Host-Port 8080 dem Container-Port 80 zu, sodass http://localhost:8080 Nginx erreicht.
Sie können mehr als einen Port veröffentlichen:
docker run -d -p 8080:80 -p 8443:443 nginx
Um nur an localhost auf dem Host zu binden, fügen Sie die Host-IP hinzu:
docker run -d -p 127.0.0.1:8080:80 nginx
Dies ist nützlich für lokale Tools, die Sie nicht auf jeder Host-Schnittstelle verfügbar machen möchten.
Daten mit Volumes persistieren
Beschreibbare Container-Ebenen sind kein guter Ort für dauerhafte Daten. Verwenden Sie einen Bind Mount, wenn Sie einen bestimmten Host-Pfad in den Container einbinden möchten:
docker run -d -p 8080:80 -v "$PWD/html:/usr/share/nginx/html:ro" nginx
Dies stellt Dateien aus Ihrem lokalen html-Verzeichnis bereit. Das Suffix :ro macht den Mount innerhalb des Containers schreibgeschützt.
Verwenden Sie ein benanntes Volume, wenn Docker den Speicherort verwalten soll:
docker run -d --name postgres -v pgdata:/var/lib/postgresql/data postgres:16
Wenn pgdata nicht existiert, erstellt Docker es. Untersuchen Sie Volumes mit:
docker volume ls
Für neue Arbeiten ist die --mount-Syntax von Docker ausführlicher, aber klarer:
docker run -d --mount type=volume,src=pgdata,dst=/var/lib/postgresql/data postgres:16
Konfiguration übergeben mit -e und --env-file
Umgebungsvariablen sind eine gängige Methode, um containerisierte Apps zu konfigurieren:
docker run -d -e APP_ENV=production my-custom-app:latest
Verwenden Sie -e mehrmals für mehrere Variablen:
docker run -d -e DB_HOST=database.example.com -e DB_USER=app my-app:latest
Für viele Variablen verwenden Sie eine Env-Datei:
docker run -d --env-file ./app.env my-app:latest
Halten Sie Geheimnisse aus festgeschriebenen .env-Dateien heraus. Umgebungsvariablen sind leicht vom Host und von Prozessen mit ausreichendem Zugriff einzusehen. Verwenden Sie daher für sensible Produktionswerte den Secret-Manager Ihrer Plattform.
Container benennen mit --name
Docker kann einen Namen generieren, aber ein klarer Name erleichtert spätere Befehle:
docker run -d --name web -p 8080:80 nginx
Dann können Sie verwenden:
docker logs web
docker stop web
docker exec -it web sh
Containernamen müssen eindeutig sein. Wenn web bereits existiert, entfernen oder umbenennen Sie den alten Container, bevor Sie den Namen wiederverwenden.
Interaktiven Modus verwenden mit -it
Für Shells und Fehlerbehebungssitzungen kombinieren Sie den interaktiven Modus und ein Pseudo-TTY:
docker run -it ubuntu bash
Wenn Sie die Shell verlassen, stoppt der Container. Fügen Sie --rm für Wegwerfsitzungen hinzu:
docker run --rm -it alpine sh
Eine Neustartrichtlinie wählen
Neustartrichtlinien teilen Docker mit, was zu tun ist, wenn ein Container beendet wird:
docker run -d --name web --restart unless-stopped -p 8080:80 nginx
Häufige Richtlinien sind:
no: nicht automatisch neu starten. Dies ist die Standardeinstellung.on-failure[:max-retries]: nur nach einem Exit-Code ungleich Null neu starten.always: immer neu starten, wenn der Container stoppt, auch nach Neustart des Docker-Daemons.unless-stopped: neu starten, es sei denn, Sie haben den Container explizit gestoppt.
Für langlebige lokale Dienste ist unless-stopped oft besser geeignet als always, da ein manueller Stopp respektiert bleibt.
Wegwerfcontainer entfernen mit --rm
Gestoppte Container bleiben auf der Festplatte, bis Sie sie entfernen. Für einmalige Befehle bereinigt --rm den Container nach dem Beenden:
docker run --rm ubuntu echo "Hallo von einem temporären Container"
Verwenden Sie --rm nicht für Container, deren gestoppten Zustand Sie später untersuchen müssen.
Praktisches Beispiel
Dieser Befehl führt eine Web-App mit einem stabilen Namen, einem veröffentlichten Port, einem bind-gemounteten Protokollverzeichnis, einer Umgebungsvariablen und einer Neustartrichtlinie aus:
docker run -d \
--name my-app \
--restart on-failure \
-p 3000:80 \
-v "$PWD/logs:/app/logs" \
-e NODE_ENV=production \
my-node-app:1.0
Nach dem Start überprüfen Sie den Container und die Protokolle:
docker ps
docker logs my-app
Fazit
Beginnen Sie mit dem kleinsten docker run-Befehl, der funktioniert, und fügen Sie dann Optionen für das gewünschte Verhalten hinzu: -d für Hintergrunddienste, -p für Zugriff, -v oder --mount für Daten, -e für Konfiguration, --name für Operationen, --restart für Ausfallsicherheit und --rm für temporäre Ausführungen.