ADD与COPY指令的区别和联系

如果我们想在Dockerfile中添加资源(通常是文件或者文件目录)有两种形式,那么我们在实际使用时究竟选择哪一个指令好一点呢?下面我将分别介绍两者的区别与联系,搞懂了它们各自的用途,就知道怎么选择了

在前面的文章中大致介绍了ADDCOPY的用法,如何使用将不再赘述,下面详细说明它们的区别与联系。

  • ADD 指令

ADD指令用于从src处拷贝新的文件、文件目录或者由URL标记的文件,并将这些资源添加到镜像文件系统中指定的位置dest, 官方给出的定义如下:

The ADD instruction copies new files, directories or remote file URLs 
from <src> and adds them to the filesystem of the image at the path 
<dest>.
  • COPY指令

COPY指令用于从src处拷贝新的文件,文件目录,并将这些资源添加到容器文件系统中指定的位置dest, 官方给出的定义如下:

The COPY instruction copies new files or directories from <src> and 
adds them to the filesystem of the container at the path <dest>.

对于两者的定义,区别可能比较清晰了:

  • 第一处ADD指令可以添加URL资源,或者说可以直接从远程添加文件到镜像中,或者说,而COPY不具备这样的能力;
  • 第二处ADD指令将这些资源添加到镜像镜像的文件系统;而COPY指令是将这些资源添加到容器的文件系统中;ADD指令是将资源添加到静态文件系统中,COPY指令是将资源添加到动态文件系统中,具体有什么实质性的体现呢?
    下面详细说明ADD指令带来的实际影响。
    • 如果src是文件类型的资源,dest/结尾, 则docker会把dest当作一个目录看待,会把资源拷贝到dest目录下。如果dest不存在,则会创建dest目录;

    • 如果src是个文件类型的资源,dest不以/结尾,则docker会把dest当作一个文件看待;

    • 如果dest存在,则会把src拷贝到dest的上级目录中,并重命名为dest;如果目标文件dest是已存在,会用源文件中的内容覆盖掉dest中的内容。

    • 如果src是个目录,且dest不存在,则docker会创建一个名为dest的目录,把src目录下的文件拷贝进来。如果dest是个已经存在的目录,则docker会把src目录下的文件拷贝到该目录下。

    • 如果源文件是压缩文件,则docker会自动解压。

以上是这两个指令之间的区别与联系,大家根据自己对这两条指令的熟悉程度使用,
建议在不熟悉两个指令的情况下,使用COPY不会带来更多的麻烦,其他的处理可通过RUN指令来完成,因为ADD指令的有些行为不可控、不可见,也可以自己抽点时间测试验证一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

banche168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值