我不知道什么时候应该使用CMD vs RUN。例如,要执行bash/shell命令(即ls -la),我总是使用CMD,或者有一种情况下我会使用RUN?试图理解这两个类似Dockerfile指令的最佳实践。
当前回答
RUN -安装Python,你的容器现在已经将Python烧录到它的映像中 CMD - python hello.py,运行您最喜欢的脚本
其他回答
RUN是一个映像构建步骤,运行命令后容器的状态将被提交给容器映像。Dockerfile可以有许多RUN步骤,这些步骤层层叠加在一起构建映像。
CMD是容器在启动构建的映像时默认执行的命令。Dockerfile将只使用最终定义的CMD。当使用docker命令$image $other_command启动容器时,可以覆盖CMD。
ENTRYPOINT也与CMD密切相关,可以修改容器从映像启动的方式。
RUN -安装Python,你的容器现在已经将Python烧录到它的映像中 CMD - python hello.py,运行您最喜欢的脚本
注意:不要混淆RUN和CMD。RUN实际上运行一个命令和 提交结果;CMD在构建时不执行任何东西,但是 指定映像的预期命令。
来自docker文件引用
https://docs.docker.com/engine/reference/builder/#cmd
在RUN和CMD上已经有足够的答案。我只想就ENTRYPOINT补充几句话。CMD参数可以被命令行参数覆盖,而ENTRYPOINT参数总是被使用。
这篇文章是一个很好的信息来源。
RUN -命令在我们构建docker映像时触发。
CMD -命令在我们启动创建的docker映像时触发。
推荐文章
- 如何从私有docker注册表中删除图像?
- 创建多个标签码头镜像
- Docker -如何将文件从镜像复制到主机?
- 如何防止docker在系统启动时自动启动容器?
- 什么是Docker映像“层”?
- 无法从docker-compose连接到docker
- Docker错误无法删除Docker容器,冲突:无法删除存储库引用
- 如何让容器在Kubernetes上运行?
- 如何备份docker容器的数据卷?
- Docker入口点运行bash脚本被“拒绝权限”
- 我如何复制Docker作为非根?
- 如何禁用容器上的自动重启?
- 如何传递参数到Dockerfile?
- 如何知道docker是否已经登录到docker注册服务器
- 为什么安装了Docker而没有安装Docker Compose?