首页 文章

Docker文件中RUN和CMD之间的差异

提问于
浏览
140

我很困惑何时应该使用 CMD vs RUN . 例如,要执行bash / shell命令(即 ls -la ),我总是使用 CMD 或者是否存在使用 RUN 的情况?试图了解这两个类似的 Dockerfile 指令的最佳实践 .

6 回答

  • 224

    RUN是一个图像构建步骤, RUN 命令之后的容器状态将被提交到docker镜像 . Dockerfile可以有许多 RUN 步骤层叠在一起以构建图像 .

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

    ENTRYPOINT也与 CMD 密切相关,可以修改容器启动图像的方式 .

  • 2

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

    RUN - RUN指令允许您安装所需的应用程序和包 . 它在当前图像之上执行任何命令,并通过提交结果来创建新图层 . 通常,您会在Dockerfile中找到多个RUN指令 .

    CMD - CMD指令允许您设置默认命令,只有在未指定命令的情况下运行容器时才会执行该命令 . 如果Docker容器使用命令运行,则将忽略默认命令 . 如果Dockerfile有多个CMD指令,那么除了最后一个
    CMD指令被忽略 .

  • 39

    RUN - 在我们构建docker镜像时触发命令 .

    CMD - 在我们启动创建的docker镜像时触发命令 .

  • 5

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

    来自docker文件参考

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

  • 32

    RUN - 安装Python,你的容器现在已经将python烧成了它的图像
    CMD - python hello.py,运行你最喜欢的脚本

  • 2

    RUN命令:当我们构建图像时,RUN命令基本上会执行默认命令 . 它还将为下一步提交图像更改 .

    可以有多个RUN命令,以帮助构建新图像的过程 .

    CMD命令:CMD命令只会为新容器设置默认命令 . 这不会在构建时执行 .

    如果docker文件有超过1个CMD命令,则除最后一个命令外,所有命令都将被忽略 . 由于此命令不会执行任何操作,只需设置默认命令即可 .

相关问题