Dockerfile中的COPY和ADD命令有什么区别?我什么时候可以使用其中一个命令而不是另一个命令?
COPY <src> <dest>
COPY指令将从<src>复制新文件,并将它们添加到路径<dest>的容器文件系统中
ADD <src> <dest>
ADD指令将从<src>复制新文件,并将它们添加到路径<dest>的容器文件系统中。
Dockerfile中的COPY和ADD命令有什么区别?我什么时候可以使用其中一个命令而不是另一个命令?
COPY <src> <dest>
COPY指令将从<src>复制新文件,并将它们添加到路径<dest>的容器文件系统中
ADD <src> <dest>
ADD指令将从<src>复制新文件,并将它们添加到路径<dest>的容器文件系统中。
当前回答
COPY将文件/目录从主机复制到图像。
ADD将文件/目录从主机复制到映像,但也可以获取远程URL、提取TAR文件等。。。
使用COPY将文件和/或目录复制到构建上下文中。
使用ADD下载远程资源、提取TAR文件等。。
其他回答
COPY将文件/目录从主机复制到图像。
ADD将文件/目录从主机复制到映像,但也可以获取远程URL、提取TAR文件等。。。
使用COPY将文件和/或目录复制到构建上下文中。
使用ADD下载远程资源、提取TAR文件等。。
假设您有一个tar文件,您想在将其放入容器后解压缩它,然后删除它,您可以使用COPY命令执行此操作。但各种命令可能是1)将tar文件复制到目标,2)。解压缩,3)删除tar文件。如果您分三步完成此操作,则在每一步之后都会创建一个新图像。您可以使用&一步到位,但这很麻烦。
但是你使用了ADD,那么Docker会为你处理所有的事情,只会创建一个中间映像。
如果您有foo.tar.gz文件,请比较以下命令。ADD命令创建的层比COPY命令少,并且在推送docker图像时节省了大量的网络流量。
ADD foo.tar.gz /
COPY foo.tar.gz /
RUN tar -zxvf foo.tar.gz
RUN rm -rf foo.tar.gz
副本为
与“ADD”相同,但没有tar和远程URL处理。
直接从源代码引用。
从Docker文档:
添加或复制虽然ADD和COPY功能相似,但一般来说,COPY是首选。这是因为它比ADD更透明。COPY仅支持将本地文件基本复制到容器中,而ADD具有一些不明显的功能(如仅本地的tar提取和远程URL支持)。因此,ADD的最佳用途是将本地tar文件自动提取到图像中,如ADD rootfs.tar.xz/中所示。
更多:编写Dockerfile的最佳实践