【问题标题】:RUN directive in Dockerfile and shellscript file instead fo inline commands, are new layers created?Dockerfile 和 shell 脚本文件中的 RUN 指令而不是内联命令,是否创建了新层?
【发布时间】:2022-01-18 05:55:07
【问题描述】:

在 Dockerfile 里面我有这个

......
......
RUN \\
       chown root:root /opt \\
    && chown wasadmin:mqm /opt/adp \\
    && chown wasadmin:mqm -R /opt/adp/pids/ \\
    && chown wasadmin:mqm -R /var/scripts/
.......
.......

我想代替上面的内容

......
......
COPY scripts/myscript.sh /tmp
RUN chmod 700 /tmp/myscript.sh && /tmp/myscript.sh
.......
.......

/tmp/myscript.sh 的内容与第一个 RUN 命令的内容相同,也就是

chown root:root /opt
chown wasadmin:mqm /opt/adp
chown wasadmin:mqm -R /opt/adp/pids/
chown wasadmin:mqm -R /var/scripts/

第二种方法会减少层数吗?

【问题讨论】:

  • 第一种方法将创建 1 层,第二种方法将创建 2 层。第二个图像也将包含您的脚本文件,因此会大一些。

标签: docker dockerfile docker-image


【解决方案1】:

实际上,您会发现完全没有区别(除非您的 Dockerfile 非常大),如果脚本很大,您可能会发现编辑和调试单独的脚本更容易。如果你正在考虑这条路,那没有什么问题。

在技术层面上,是的,“经典”Docker 构建器将使用额外的脚本创建一个额外的层。 (较新的 BuildKit 构建器具有一些优化功能,并且可能表现不同。)除非您达到 Docker 的内部层限制或存在构建缓存考虑因素,否则这并没有任何意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2019-09-12
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多