docker文件中的RUN和CMD有什么区别?我应该什么时候使用这个或另一个?

我很困惑什么时候应该使用CMD和RUN。 例如,要执行bash / shell命令(即ls -la ),我总是会使用CMD,或者有使用RUN的情况? 尝试了解这两个相似的Dockerfile指令的最佳实践。

RUN是图像构build步骤, RUN命令之后容器的状态将被提交到泊坞窗图像。 一个Dockerfile可以有许多RUN步骤,它们层叠在一起形成图像。

CMD是启动构build映像时容器默认执行的命令。 一个Dockerfile只能有一个CMD 。 使用docker run $image $other_command启动容器时,可以覆盖CMD

入口点也与CMD密切相关,可以修改容器启动图像的方式。

我发现这篇文章非常有助于理解它们之间的区别:

RUN – RUN指令允许你安装你所需的应用程序和软件包。 它在当前图像上执行任何命令,并通过提交结果创build一个新图层。 通常你会在Dockerfile中find多个RUN指令。

CMD – CMD指令允许你设置一个默认的命令,只有当你运行容器而不指定命令时才会执行。 如果Docker容器运行一个命令,默认命令将被忽略。 如果Dockerfile有多个CMD指令,除了最后一个
CMD指令被忽略。

运行 – 命令触发器,当我们build立docker图像。

CMD – 命令触发器,当我们启动创build的docker图像。

注意:不要将RUN与CMD混淆。 RUN实际上运行一个命令并提交结果; CMD不会在构build时执行任何操作,而是指定图像的预期命令。

从docker文件参考

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