首页 > 解决方案 > 人们是否有理由将所有内容都写入 DockerFile 而不是单独的 shell 脚本?

问题描述

我不知何故不喜欢RUN x && y && z ...我们目前在 DockerFile 中使用的语法。据我了解,我可以只运行一个 shell 脚本,而不是喜欢RUN xyz.sh用我最喜欢的语言执行相同的任务。后者有什么缺点吗?

标签: dockerdockerfile

解决方案


更新:

除了 David 关于复杂性的观点之外,我相信将所有内容都写入 Dockerfile 可以更容易地共享(从而为您创造幸存者偏差)。即在 DockerHub 上,大多数时候,您都有一个“Dockerfile”选项卡来快速了解如何构建映像。如果作者使用COPYand RUN xyz.sh,他/她将不得不将脚本托管在其他地方,否则单独的 Dockerfile 将变得毫无意义。


CMD在运行时执行,即从图像创建容器时。RUN是构建时间指令。所以问题实际上是为什么人们用RUN而不是CMD在运行时运行东西。(那你当然COPY script.sh /script.sh可以RUN bash /script.sh

  1. 如果您执行诸如安装依赖项之类的操作,则可能会花费大量时间,在扩展服务的情况下,这将使自动扩展变得无用,因为它的速度不足以吸收峰值。

  2. 在构建时,RUN可以缓存,所以下次构建会快很多。

  3. 因为 docker 文件系统的工作方式,从同一个镜像创建 10 个容器只比创建 1 个容器多占用一些空间。所以你可以通过在镜像中安装包来节省磁盘空间,而如果你在运行时安装它们,它们都会占用一部分磁盘空间。


推荐阅读