wake-up-neo.com

Unterschied zwischen RUN und CMD in einer Docker-Datei

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.

203
TakeSoUp

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.

312
Matt

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.

71
Nisal Edu

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.

53
fay

RUN - Install Python, Ihr Container hat jetzt python in sein Image eingebrannt
CMD - python hallo.py, führen Sie Ihr Lieblingsskript aus

6
Rohit Salecha

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.

5
Bharat Raj

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

https://docs.docker.com/engine/reference/builder/#cmd

5
Elsayed