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.