我不知道什么时候应该使用CMD vs RUN。例如,要执行bash/shell命令(即ls -la),我总是使用CMD,或者有一种情况下我会使用RUN?试图理解这两个类似Dockerfile指令的最佳实践。
当前回答
我发现这篇文章对理解它们之间的区别很有帮助:
运行- RUN指令允许您安装应用程序和包 这是必需的。它在当前图像上执行任何命令 并通过提交结果创建一个新层。通常你会发现 Dockerfile中的多个RUN指令。
CMD - CMD指令允许您设置一个默认命令,这将是 仅在不指定命令的情况下运行container时执行。 如果Docker容器使用命令运行,则默认命令为 忽略了。如果Dockerfile有多个CMD指令,则all but last CMD指令被忽略。
其他回答
RUN是一个映像构建步骤,运行命令后容器的状态将被提交给容器映像。Dockerfile可以有许多RUN步骤,这些步骤层层叠加在一起构建映像。
CMD是容器在启动构建的映像时默认执行的命令。Dockerfile将只使用最终定义的CMD。当使用docker命令$image $other_command启动容器时,可以覆盖CMD。
ENTRYPOINT也与CMD密切相关,可以修改容器从映像启动的方式。
我发现这篇文章对理解它们之间的区别很有帮助:
运行- RUN指令允许您安装应用程序和包 这是必需的。它在当前图像上执行任何命令 并通过提交结果创建一个新层。通常你会发现 Dockerfile中的多个RUN指令。
CMD - CMD指令允许您设置一个默认命令,这将是 仅在不指定命令的情况下运行container时执行。 如果Docker容器使用命令运行,则默认命令为 忽略了。如果Dockerfile有多个CMD指令,则all but last CMD指令被忽略。
注意:不要混淆RUN和CMD。RUN实际上运行一个命令和 提交结果;CMD在构建时不执行任何东西,但是 指定映像的预期命令。
来自docker文件引用
https://docs.docker.com/engine/reference/builder/#cmd
RUN -命令在我们构建docker映像时触发。
CMD -命令在我们启动创建的docker映像时触发。
RUN -安装Python,你的容器现在已经将Python烧录到它的映像中 CMD - python hello.py,运行您最喜欢的脚本
推荐文章
- E: gnupg, gnupg2和gnupg1似乎没有安装,但是这个操作需要其中一个
- 如何从docker更改默认docker注册表。IO到我的私人注册表?
- Docker- compose无法连接到Docker Daemon
- 单个命令停止和删除docker容器
- 使用GPU从docker容器?
- 如何使用本地映像作为dockerfile的基本映像?
- 谁能解释一下docker.sock
- 多重from是什么意思
- 通过映像名称停止Docker容器- Ubuntu
- 如果dockerfile的名称不是dockerfile,我如何构建一个dockerfile ?
- 守护进程的错误响应:已被集装箱使用"
- 如何从DockerFile运行docker实例?
- 我是否试图连接到启用TLS的没有TLS的守护进程?
- Docker -一种访问主机USB或串行设备的方法?
- Docker:无效引用格式