Ich bin verwirrt darüber, wann ich CMD vs RUN verwenden soll. Zum Beispiel, um Bash/Shell-Befehle (d. H. ls -la
) auszuführen, würde ich immer CMD verwenden oder gibt es eine Situation, in der ich RUN verwenden würde? Versuchen, die Best Practices zu diesen beiden ähnlichen Dockerfile-Direktiven zu verstehen.Was ist der Unterschied zwischen RUN und CMD in einer Andockdatei und wann sollte ich das eine oder andere verwenden?
Antwort
RUN ist ein Image-Build-Schritt, der Status des Containers nach einem RUN
-Befehl wird an das Docker-Image übergeben. Eine Dockerfile kann viele RUN
Schritte haben, die übereinander liegen, um das Bild zu erstellen.
CMD ist der Befehl, den der Container standardmäßig ausführt, wenn Sie das integrierte Image starten. Eine Dockerfile kann nur eine CMD
haben. Die CMD
kann beim Starten eines Containers mit docker run $image $other_command
überschrieben werden.
ENTRYPOINT ist auch eng verwandt mit CMD
und kann ändern, wie ein Container ein Image startet.
Ich fand this Artikel sehr hilfreich, um den Unterschied zwischen ihnen zu verstehen:
RUN - RUN Anweisung Sie Ihre Anwendung und Pakete für sie erforderlich installieren. Es führt alle Befehle über dem aktuellen Bild aus und erstellt eine neue Ebene, indem es die Ergebnisse festschreibt. Oft finden Sie mehrere RUN-Anweisungen in einer Dockerfile.
CMD - CMD-Befehl können Sie einen Standardbefehl setzen, die nur dann ausgeführt wird, wenn Sie Container laufen, ohne einen Befehl angibt. Wenn der Docker-Container mit einem Befehl ausgeführt wird, wird der Standardbefehl ignoriert. Wenn Dockerfile mehr als einen CMD-Befehl hat, werden alle bis auf die letzten
CMD-Befehle ignoriert.
Hinweis: RUN nicht mit CMD verwechseln. RUN führt tatsächlich einen Befehl aus und bestätigt das Ergebnis; CMD führt zur Build-Zeit nichts aus, aber gibt den beabsichtigten Befehl für das Image an.
von Docker Dateireferenz
RUN - Befehl auslöst, während wir die Docker Bild aufzubauen.
CMD - Befehl löst aus, während wir das erstellte Docker-Image starten.
RUN - Ihre Python hello.py, führen Sie Ihre Lieblings-Skript
Sie alle 'RUN'needed Setup - Installieren Sie Python, jetzt Ihr Container Python verbrannt in seinem Bild
CMD hat Umgebung, und Ihre (einzige) CMD startet den Prozess in Ihrem Container ausgeführt, Beispiel, für nginx, extrahieren von https://github.com/nginxinc/docker-nginx/blob/2f25936db78f98a4fac8e9fd9ac8ff53f244d3ea/mainline/jessie/Dockerfile Sie sehen die Zeile 'CMD [" nginx "," -g "," Daemon off; "]' ' – user2915097