作者:子幽 | 来源:互联网 | 2022-11-22 16:14
我不知道RUN x && y && z ...
我们目前在DockerFile中使用的语法.据我所知,我可以只运行一个shell脚本RUN xyz.sh
,并在我最喜欢的语言上执行相同的任务.后者有不利之处吗?
1> Siyu..:
更新:
除了大卫关于复杂性的观点之外,我相信将所有内容写入Dockerfile会使共享变得更容易(从而为您创造生存偏见).即在DockerHub上,大多数情况下,您都有一个"Dockerfile"选项卡,可以快速了解图像的构建方式.如果作者使用COPY
和RUN xyz.sh
,他/她将不得不在其他地方托管脚本,或者单独的Dockerfile变得毫无意义.
CMD
在运行时执行,即从图像创建容器.RUN
是构建时间指令.所以问题实际上是人们为什么RUN
而不是CMD
在运行时运行.(你当然也可以COPY script.sh /script.sh
再RUN bash /script.sh
)
如果您执行安装依赖项之类的操作,则可能需要花费大量时间,如果扩展您的服务,这会使自动扩展无用,因为它无法快速吸收峰值.
在构建时,RUN
可以缓存,因此下次构建会快得多.
由于docker文件系统的工作方式,从同一个映像创建10个容器只需要比创建1个容器多一些空间.因此,您可以通过在映像中安装软件包来节省磁盘空间,而如果在运行时安装它们,它们将占用磁盘空间的一部分.
没有什么可以阻止你在shell脚本中复制并运行它,这可能是一个很好的混合解决方案(获得RUNning命令的好处来构建静态图像并且还具有"普通"shell脚本).IME在典型的Dockerfiles中的各种shell命令并不是那么复杂.