[英]Can I combine COPY directives in Dockerfile to minimize number of image layers?
我看到这篇文章,解释了如何使用组合RUN
指令而不是多个RUN
指令更好(即RUN a && b && c
优于RUN a; RUN b; RUN c;
)。
我想对COPY
指令做同样的事情。
如果 dst 相同,我可以COPY /src/a/ /src/b/* /src/*/c dst/
。 但是,当有多个目的地时,我做不到。
我试过COPY src/a dst/a && src/b dst/b
但它失败了:
/var/lib/docker/tmp/docker-builder.../&&: no such file or directory
这意味着&&
没有被正确解析。
有没有办法有一个简洁的COPY
指令?
不,每个COPY
指令不能有多个目的地。 如果您只想使用一个COPY
,那么如果可能的话,在容器外部构建您的目录结构,以便它与容器内部的预期结果相匹配,然后只复制整个结构。
/var/lib/docker/tmp/docker-builder.../&&: 没有那个文件或目录
这意味着 && 没有被正确解析。
&&
被正确解析。 它被解析为文件名,因为这是执行COPY
命令的底层 function 的实现方式。
COPY [--chown=<user>:<group>] <src>... <dest>
另外,请注意,只有一个(或一小群) RUN
指令的原因之一是这些指令中的每一个都在其自己的中间容器中执行,一旦执行特定的RUN
指令,它就会立即被删除,这显然会产生额外的可以通过简单地链接命令来避免的开销。
但是COPY
不是这种情况。 即使您有 100 条COPY
指令,所有这些指令也会在不创建和删除任何中间容器的情况下执行。 就我个人而言,如果它使 Dockerfile 更具可读性,我并不担心有额外的COPY
指令。 这不会以任何显着方式影响容器的构建速度和/或大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.