Dockerfile 中的COPY
和ADD
命令有什么区别,我何时使用另一个?
COPY <src> <dest>
COPY 指令将从
<src>
复制新文件,并将它们添加到路径<dest>
的容器文件系统中
ADD <src> <dest>
ADD 指令将从
<src>
复制新文件,并将它们添加到路径<dest>
的容器文件系统中。
您应该查看ADD
和COPY
文档以获得有关其行为的详尽描述,但简而言之,主要区别在于ADD
可以做的不仅仅是COPY
:
ADD
允许<src>
成为 URL ADD
的<src>
参数是以可识别的压缩格式存档,则将对其进行解压缩请注意, 编写 Dockerfiles的最佳实践建议使用COPY
,其中不需要ADD
的魔力。否则你(因为你必须查找这个答案)有一天你可能会感到惊讶,因为你的意思是将keep_this_archive_intact.tar.gz
复制到你的容器中,而是将内容喷到你的文件系统上。
关于这一点,有一些官方文档: 编写 Dockerfiles 的最佳实践
由于图像大小很重要,因此强烈建议不要使用
ADD
从远程 URL 中获取包。你应该使用curl
或wget
代替。这样,您可以删除提取后不再需要的文件,也不必在图像中添加其他图层。
RUN mkdir -p /usr/src/things \
&& curl -SL http://example.com/big.tar.gz \
| tar -xJC /usr/src/things \
&& make -C /usr/src/things all
对于不需要
ADD
的 tar 自动提取功能的其他项目(文件,目录),应始终使用COPY
。