ADD与COPY指令的区别和联系
如果我们想在Dockerfile中添加资源(通常是文件)有两种形式,那么我们在实际使用时究竟选择哪一个指令好一点呢?下面我将分别介绍两者的区别与联系,搞懂了它们各自的用途,就知道怎么选择了ADD 指令在前面的文章中大致介绍了ADD的用法,如何使用将不再赘述,下面详细说明它们的区别与联系。ADD指令用于从src处拷贝新的文件、文件目录或者由URL标记的文件,并将这些资源添加到镜像中的文...
如果我们想在Dockerfile中添加资源(通常是文件或者文件目录)有两种形式,那么我们在实际使用时究竟选择哪一个指令好一点呢?下面我将分别介绍两者的区别与联系,搞懂了它们各自的用途,就知道怎么选择了
在前面的文章中大致介绍了ADD
和COPY
的用法,如何使用将不再赘述,下面详细说明它们的区别与联系。
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
指令的有些行为不可控、不可见,也可以自己抽点时间测试验证一下。
更多推荐
所有评论(0)