Dockerfile中的`COPY`和`ADD`命令有什么区别?
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
复制到你的容器中时,你(因为你必须查找这个答案)有可能会感到惊讶,但是你可以将内容喷到你的文件系统上。
COPY
是
与“ADD”相同,但没有tar和远程URL处理。
直接从源代码中引用。
关于这一点有一些官方文档:编写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
。
上一篇: What is the difference between the `COPY` and `ADD` commands in a Dockerfile?
下一篇: How to enter in a Docker container already running with a new TTY