我不知道什么时候应该使用CMD vs RUN。例如,要执行bash/shell命令(即ls -la),我总是使用CMD,或者有一种情况下我会使用RUN?试图理解这两个类似Dockerfile指令的最佳实践。
当前回答
RUN -安装Python,你的容器现在已经将Python烧录到它的映像中 CMD - python hello.py,运行您最喜欢的脚本
其他回答
RUN:可以有很多,在构建过程中使用,例如安装多个库
CMD:只能有1,这是你的执行起点(例如["npm", "start"], ["node", "app.js"])
在RUN和CMD上已经有足够的答案。我只想就ENTRYPOINT补充几句话。CMD参数可以被命令行参数覆盖,而ENTRYPOINT参数总是被使用。
这篇文章是一个很好的信息来源。
运行命令: 当我们构建映像时,RUN命令基本上会执行默认命令。它还将提交下一步的图像更改。
可以有多个RUN命令,以帮助构建新映像的过程。
CMD命令: CMD命令将为新容器设置默认命令。这将不会在构建时执行。
如果docker文件有超过1个CMD命令,那么除了最后一个命令外,其他命令都将被忽略。因为这个命令不会执行任何东西,只是设置默认命令。
注意:不要混淆RUN和CMD。RUN实际上运行一个命令和 提交结果;CMD在构建时不执行任何东西,但是 指定映像的预期命令。
来自docker文件引用
https://docs.docker.com/engine/reference/builder/#cmd
RUN -安装Python,你的容器现在已经将Python烧录到它的映像中 CMD - python hello.py,运行您最喜欢的脚本
推荐文章
- 安装tzdata非交互式
- 试图连接到https://index.docker.io时,网络超时
- 为每个Docker图像查找图层和图层大小
- 如何避免在为Python项目构建Docker映像时重新安装包?
- 如何用docker-compose更新现有图像?
- 如何在构建docker期间设置环境变量
- 拉访问拒绝存储库不存在或可能需要docker登录
- 如何在ENTRYPOINT数组中使用Docker环境变量?
- Docker:容器不断地重新启动
- Mac/OS X上的/var/lib/docker在哪里
- 如何用docker-compose标记docker图像
- 从环境文件中读入环境变量
- 禁用特定RUN命令的缓存
- 从Docker容器获取环境变量
- E: gnupg, gnupg2和gnupg1似乎没有安装,但是这个操作需要其中一个