Detaillierte Erklärung des Unterschieds zwischen run/cmd/entrypoint in Docker

Detaillierte Erklärung des Unterschieds zwischen run/cmd/entrypoint in Docker

In Dockerfile können run, cmd und entrypoint zum Ausführen von Befehlen verwendet werden. Hier sind ihre Hauptverwendungen:

  • Der Befehl „run“ führt Befehle aus und erstellt eine neue Image-Ebene, die normalerweise zum Installieren von Softwarepaketen verwendet wird.
  • Der Befehl cmd legt den Standardbefehl und seine Parameter fest, die nach dem Start des Containers ausgeführt werden sollen. Der von CMD festgelegte Befehl kann jedoch durch die Befehlszeilenparameter nach dem Befehl docker run ersetzt werden.
  • Der beim Starten des Containers auszuführende Entrypoint-Konfigurationsbefehl wird nicht ignoriert und ausgeführt, auch wenn beim Ausführen docker run andere Befehle angegeben werden.

Ausführen von Befehlen im Shell- und Exec-Format

Wir können die von „run“, „cmd“ und „entrypoint“ auszuführenden Befehle in den folgenden zwei Formaten angeben:

  • Shell-Format: . Beispiel: yum install -y wget
  • Exec-Format: ["ausführbare Datei", "Param1", "Param2", …]. Zum Beispiel: [„yum“, „install“, „-y“, „wget“]

Es wird empfohlen, für cmd und Entrypoint das Exec-Format zu verwenden, da die Anweisungen besser lesbar und leichter verständlich sind, während für „run“ beide Formate akzeptabel sind.

Fallstricke beim Exec-Format

Der Inhalt der Docker-Datei ist wie folgt:

Umgebungsname Morris

Einstiegspunkt ["echo", "$name"]

Diese Schreibweise gibt nur „$name“ aus und ersetzt die Variable nicht, da nur der Echo-Befehl und nicht die Shell ausgeführt wird. Dies bedeutet, dass wir echo nicht in der Shell ausführen, sondern einfach echo ausführen, sodass die Variable nicht ersetzt wird.

Um es in eine ausführbare Shell umzuwandeln, müssen Sie es in die folgende Form umschreiben

Umgebungsname Morris

Einstiegspunkt ["/bin/bash", "-c", "echo $name"]

Befehl ausführen

Der Befehl „Ausführen“ wird häufig zum Installieren von Anwendungen und Softwarepaketen verwendet. „run“ führt den Befehl über dem aktuellen Bild aus und erstellt eine neue Bildebene. Dockerfile enthält oft mehrere Ausführungsanweisungen. Hier ist ein Beispiel:

Führen Sie „yum update && yum install -y \“ aus.  
 bzr \
 Lebenslauf \
 git \
 Quecksilber \
 Subversion

yum update und yum install werden in einem Run-Befehl ausgeführt, wodurch sichergestellt wird, dass jedes Mal das neueste Paket installiert wird. Wenn „yum install“ in einem separaten Lauf ausgeführt wird, wird die von „yum update“ erstellte Image-Ebene verwendet, die möglicherweise vor langer Zeit zwischengespeichert wurde.

cmd-Befehl

Mit der cmd-Direktive kann der Benutzer den vom Container ausgeführten Standardbefehl angeben. Dieser Befehl wird ausgeführt, wenn der Container gestartet wird und mit „docker run“ kein anderer Befehl angegeben ist. Hier ist ein Beispiel:

cmd echo "Hallo Welt"

Beim Ausführen des Containers docker run -it [image] wird folgende Ausgabe ausgegeben:

Hallo Welt

Wenn jedoch danach ein Befehl hinzugefügt wird, etwa docker run -it [image] echo hi , wird cmd ignoriert und der Befehl echo hi ausgeführt:

Hi

Wenn mehrere cmd-Befehle vorhanden sind, wird nur der letzte cmd-Befehl ausgeführt.

Entrypoint-Befehl

Das Exec-Format des Einstiegspunkts wird verwendet, um den Befehl und seine Parameter festzulegen, die beim Starten des Containers ausgeführt werden sollen. Zusätzliche Parameter können über den Befehl cmd oder Befehlszeilenparameter bereitgestellt werden. Im Gegensatz zum cmd-Befehl werden immer die Parameter im Entrypoint verwendet. Hier ist ein Beispiel:

Einstiegspunkt ["Echo", "Hallo"]

Wenn der Container über docker run -it [image] gestartet wird, ist die Ausgabe:

Hallo

Wenn es mit docker run -it [image] morris gestartet wird, ist die Ausgabe:

Hallo Morris

Schauen wir uns ein weiteres Beispiel an. Das Dockerfile ist:

Einstiegspunkt ["Echo", "Hallo"]
cmd ["Welt"]

Wenn der Container über docker run -it [image] gestartet wird, ist die Ausgabe:

Hallo Welt

Wenn Sie es mit docker run -it [image] morris starten, ist die Ausgabe:

Hallo Morris

Die Parameter im Einstiegspunkt werden immer verwendet, während die zusätzlichen Parameter von cmd beim Starten des Containers dynamisch ersetzt werden können.

Wenn mehrere Einstiegspunktbefehle vorhanden sind, wird entsprechend nur der letzte Einstiegspunktbefehl ausgeführt.

Zusammenfassen

  • Verwenden Sie den Befehl „Ausführen“, um Anwendungen und Softwarepakete zu installieren und Images zu erstellen.
  • Wenn der Zweck des Docker-Image darin besteht, eine Anwendung oder einen Dienst auszuführen, z. B. MySQL, sollte zuerst die Entrypoint-Anweisung im Exec-Format verwendet werden. cmd kann zusätzliche Standardparameter für den Einstiegspunkt bereitstellen und die Standardparameter können durch die Docker-Run-Befehlszeile ersetzt werden.
  • Wenn Sie einen Standardstartbefehl für den Container festlegen möchten, verwenden Sie den Befehl cmd. Benutzer können diesen Standardbefehl in der Docker-Run-Befehlszeile ersetzen.

Dies ist das Ende dieses Artikels über die Unterschiede zwischen run/cmd/entrypoint in Docker. Weitere relevante Inhalte zu Docker run/cmd/entrypoint finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Lösung für das Problem, dass Docker CMD/ENTRYPOINT das sh-Skript ausführt: nicht gefunden/run.sh:
  • Führen Sie nach dem Docker-Ausführen mehrere Befehle aus
  • Ubuntu vps installiert Docker und meldet einen Fehler: Es kann keine Verbindung zum Docker-Daemon unter unix:///var/run/docker.sock hergestellt werden. Problem gelöst
  • Docker verwendet CMD- oder ENTRYPOINT-Befehle, um mehrere Dienste gleichzeitig zu starten
  • Detaillierte Erklärung der CMD- und ENTRYPOINT-Befehle im Dockerfile

<<:  Zusammenfassung der drei Phasen der Entwicklung eines visuellen Designers

>>:  Detaillierte Erklärung des MySQL-Datenbank-LIKE-Operators in Python

Artikel empfehlen

MySQL-Einstellungscode für die grüne Version und Details zum Fehler 1067

MySQL-Einstellungscode für grüne Version und Fehl...

jQuery erzielt Ein- und Ausblendeffekte

Bevor wir jQuery verwenden, um den Ein- und Ausbl...

Vollständige Schritte zum Erstellen eines Hochleistungsindex in MySQL

Inhaltsverzeichnis 1. Index-Grundlagen 1. Arten v...

MySQL vollständig deinstallieren. Persönlicher Test!

MySQL sauber deinstallieren. Persönlich getestet,...

Vue implementiert die Seiten-Caching-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

MySQL-Lösung zur funktionalen Indexoptimierung

Bei der Verwendung von MySQL führen viele Entwick...

Analyse von MySQL-Latenzproblemen und Datenlöschungsstrategieprozess

Inhaltsverzeichnis 1. MySQL-Replikationsprozess 2...

Zusammenfassung der Binlog-Nutzung der MySQL-Datenbank (unbedingt lesen)

Ich werde nicht näher darauf eingehen, wie wichti...

Beschreibung der Nginx-Zugriffsprotokoll- und Fehlerprotokollparameter

veranschaulichen: Es gibt zwei Haupttypen von Ngi...

Vue3 implementiert ein Beispiel für eine Nachrichtenkomponente

Inhaltsverzeichnis Komponentendesign Definieren d...

W3C Tutorial (14): W3C RDF und OWL Aktivitäten

RDF und OWL sind zwei wichtige semantische Webtec...

Der Unterschied zwischen MySQL Outer Join und Inner Join Abfrage

Die Syntax für einen äußeren Join lautet wie folg...