在Dockerfile中,COPY和ADD指令都是用来将文件从构建环境复制到镜像中的。它们的功能相似,但它们之间有一些关键区别,这些区别使得在不同情况下选择一个而不是另一个更合适。
COPY 指令
COPY指令的功能比较直接,它的基本形式是:
dockerfileCOPY <源路径> <目标路径>
这个指令将从构建环境中的 <源路径> 复制文件到镜像文件系统上的 <目标路径>。例如:
dockerfileCOPY ./hello.txt /app/hello.txt
这行指令将把构建环境中的 hello.txt 文件复制到镜像中的 /app/hello.txt。
ADD 指令
ADD 指令与 COPY 相似,但提供了一些额外的功能:
dockerfileADD <源路径> <目标路径>
除了复制文件,ADD 还可以:
- 自动解压缩归档文件:如果源文件是一个归档(例如
.tar文件),ADD会自动将其解压到<目标路径>。 - 支持从URL下载文件:如果
<源路径>是一个URL,ADD可以下载这个URL的内容到<目标路径>。
例如:
dockerfileADD https://example.com/example.tar.gz /app/
这行指令将从指定的URL下载 example.tar.gz 文件,并自动解压到 /app/ 目录中。
选择 COPY 还是 ADD
尽管 ADD 提供了一些额外的功能,Docker官方建议尽可能使用 COPY,因为它的行为更为直接和可预测。如果你不需要 ADD 的额外功能(如自动解压缩或从URL下载文件),最好选择 COPY,以保持Dockerfile的简洁和明确。
总结,虽然 COPY 和 ADD 都可以用来从构建环境复制文件到镜像中,但 COPY 是一个更简单和推荐使用的选择,除非你需要 ADD 的特殊功能。这样的选择有助于提高Docker镜像构建的可维护性。
2024年7月19日 17:18 回复