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

Diskussion über Standard-Rand- und Füllwerte allgemeiner Elemente

Heute haben wir die Frage besprochen, wie hoch de...

Zusammenfassung der Implementierungsmethoden und Punkte der H5-Wakeup-APP

Inhaltsverzeichnis Vorwort Zur APP-Methode spring...

Optimierungsmethoden, wenn MySQL zu viel CPU beansprucht (unbedingt lesen)

Wenn MySQL zu viel CPU beansprucht, wo sollten wi...

So verwenden Sie Docker-Compose, um Django-Anwendungen offline bereitzustellen

Inhaltsverzeichnis Installieren Sie Docker-ce für...

Detaillierter Vue-Code zur Implementierung der Shuttle-Box-Funktion

Vue - Implementierung der Shuttle-Box-Funktion. D...

So zeigen Sie Linux-SSH-Dienstinformationen und den Ausführungsstatus an

Es gibt viele Artikel zur SSH-Serverkonfiguration...

Lösung für den Fehler, dass IE6 select nicht durch div abgedeckt werden kann

Verwenden Sie div, um eine Maske zu erstellen oder...

Lösung für die nicht wirksame Änderung des El-Popover-Stils von ElementUI

Bei der Verwendung von Element-UI gibt es eine hä...

CentOS 7.9 Installations- und Konfigurationsprozess von zabbix5.0.14

Inhaltsverzeichnis 1. Grundlegende Umgebungskonfi...

Beispielcode zum Installieren der ASPNET.Core3.0-Runtime unter Linux

# Die folgenden Beispiele gelten für die x64-Bit-...