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

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

4 Solutions collect form web for “docker文件中的RUN和CMD有什么区别?我应该什么时候使用这个或另一个?”

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

  • 如何用docker-compose重新启动一个容器
  • 请参阅Docker中运行/停止容器的完整命令
  • 如何在Docker上公开一个UDP端口?
  • Docker:你是否试图连接到启用TLS的守护进程而不使用TLS?
  • 如何SSH入docker机VirtualBox实例?
  • 每次更换后重build容器?
  • docker工人如何使用主机操作系统的CPU核心?
  • 来自守护进程的Docker错误响应:冲突。 已被容器使用
  • 如何处理docker中的永久性存储(例如数据库)
  • 如何在Dockerfile中发表评论?
  • 我应该使用Dockerfiles还是图像提交?