前言:
目前大家对“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同级或者子目录里面,不支持通过“../”方式从父目录中搜索文件。