龙空技术网

Docker经典面试题:Dockerfile中,ADD和COPY的区别?

云技术趣谈 817

前言:

目前大家对“dockerfile copy 覆盖”大体比较关注,你们都需要学习一些“dockerfile copy 覆盖”的相关内容。那么小编也在网络上收集了一些有关“dockerfile copy 覆盖””的相关资讯,希望小伙伴们能喜欢,姐妹们一起来学习一下吧!

面对几乎每个面试的候选人,我都会问这个问题,但很奇怪,这个问题并不难,但却很少有人能回答得比较全面。

这两个命令其实都是Dockerfile非常基础的命令。两个命令的格式类似

ADD

ADD [“<源路径>“,... “<目标路径>“]

COPY

COPY [“<源路径1>“,“<源路径2>“... “<目标路径>“]

但它们在使用上面还有有些区别的,大部分童鞋的回答基本都是:经常使用,都是拷贝文件到镜像里面,但没有注意有啥区别。

其实他们之间主要有两点区别

第一个区别是ADD的源可以是URL,当遇到URL时候,ADD可以通过URL下载文件并且复制到目标路径,但这样也会带来安全隐患,无法确定URL地址是一个安全可信赖的资源,所有建议生产环境尽量使用COPY。第二个区别是ADD可以解压,当遇到tar, gzip, bzip2等压缩格式,可以解压到指定的目录。ADD的解压并非直接读取文件名后缀,而是通过解析文件内容从而确定源文件是否属于压缩归档文件,所以如果是一个压缩归档文件,无论如何重命名,都可以解压到指定的目标目录下。

最后还需要注意:当我们在Dockerfile目录下执行”docker build -t xx .“构建镜像的时候,当前的构建目录就是Dockerfile所在目录,无论是COPY还是ADD源路径都是相对于Dockerfile文件来说的,所以这些源文件必须放到Dockerfile同级或者子目录里面,不支持通过“../”方式从父目录中搜索文件。

标签: #dockerfile copy 覆盖 #dockerfile copy from