COPY 和 ADD 都是 Dockerfile 中用于从构建环境复制文件到 Docker 镜像中的指令。但是,它们之间有一些关键的区别:
-
基本功能:
COPY: 简单地将本地文件或目录复制到目标 Docker 镜像中的指定路径。ADD: 同样可以复制本地文件或目录到镜像中,但 ADD 还支持两个附加功能:一是能够处理 URL 源文件,将 URL 指向的文件下载到镜像中;二是在复制过程中自动处理压缩格式的文件(如 tar 压缩包),将压缩包解压到目标路径。
-
使用建议:
- 由于
COPY只关注基本复制操作,它的行为更为直接和预测,因此 Docker 官方推荐在只需要复制文件的场景下使用COPY。 ADD应当用于COPY无法满足的特殊场景,比如需要下载网络资源或自动解压压缩文件时。
- 由于
-
示例:
- 使用
COPY指令:COPY ./localfile.txt /path/in/container/localfile.txt - 使用
ADD指令:ADD http://example.com/examplefile.tar /path/in/container/
- 使用
总结来说,尽管 ADD 提供了更多功能,但在大多数情况下,推荐使用 COPY 以保持 Dockerfile 的简洁和可维护性。