Ich bin verwirrt, wann ich CMD
vs RUN
verwenden soll. Zum Beispiel, um bash/Shell-Befehle auszuführen (d. H. ls -la
) Ich würde immer CMD
verwenden, oder gibt es eine Situation, in der ich RUN
verwenden würde? Versuchen, die Best Practices für diese beiden ähnlichen Dockerfile
Direktiven zu verstehen.
RUN ist ein Image-Erstellungsschritt. Der Status des Containers nach einem RUN
-Befehl wird an das Docker-Image übergeben. Eine Docker-Datei kann viele RUN
Schritte enthalten, die übereinander liegen, um das Bild zu erstellen.
CMD ist der Befehl, den der Container standardmäßig ausführt, wenn Sie das erstellte Image starten. Eine Docker-Datei kann nur ein CMD
enthalten. Das CMD
kann überschrieben werden, wenn ein Container mit docker run $image $other_command
Gestartet wird.
ENTRYPOINT ist auch eng mit CMD
verwandt und kann die Art und Weise ändern, wie ein Container ein Bild startet.
Der Befehl RUN wird ausgelöst, während das Docker-Image erstellt wird.
Der CMD-Befehl wird ausgelöst, während das erstellte Docker-Image gestartet wird.
Ich fand this Artikel sehr hilfreich, um den Unterschied zwischen ihnen zu verstehen:
[~ # ~] run [~ # ~] - Mit der RUN-Anweisung können Sie Ihre Anwendung und die dafür erforderlichen Pakete installieren. Es führt alle Befehle über dem aktuellen Bild aus und erstellt eine neue Ebene, indem die Ergebnisse festgeschrieben werden. Oft finden Sie mehrere RUN-Anweisungen in einer Docker-Datei.
[~ # ~] cmd [~ # ~] - Mit der CMD-Anweisung können Sie einen Standardbefehl festlegen, der nur ausgeführt wird, wenn Sie container without ausführen einen Befehl angeben. Wenn der Docker-Container mit einem Befehl ausgeführt wird, wird der Standardbefehl ignoriert. Wenn Dockerfile mehr als einen CMD-Befehl enthält, sind alle bis auf den letzten vorhanden
CMD-Anweisungen werden ignoriert.
RUN - Install Python, Ihr Container hat jetzt python in sein Image eingebrannt
CMD - python hallo.py, führen Sie Ihr Lieblingsskript aus
RUN-Befehl: Der RUN-Befehl führt grundsätzlich den Standardbefehl aus, wenn das Image erstellt wird. Außerdem werden die Bildänderungen für den nächsten Schritt übernommen.
Es kann mehr als einen RUN-Befehl geben, um die Erstellung eines neuen Images zu unterstützen.
CMD-Befehl: Mit CMD-Befehlen wird nur der Standardbefehl für den neuen Container festgelegt. Dies wird zum Zeitpunkt der Erstellung nicht ausgeführt.
Wenn eine Docker-Datei mehr als 1 CMD-Befehle enthält, werden alle mit Ausnahme des letzten ignoriert. Da dieser Befehl nichts ausführt, sondern nur den Standardbefehl setzt.
Hinweis: Verwechseln Sie RUN nicht mit CMD. RUN führt tatsächlich einen Befehl aus und schreibt das Ergebnis fest. CMD führt zur Erstellungszeit nichts aus, gibt jedoch den beabsichtigten Befehl für das Image an.
von Docker-Dateireferenz