在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 回复