乐闻世界logo
搜索文章和话题

What is the difference between COPY and ADD instructions in a Dockerfile?

2 个月前提问
2 个月前修改
浏览次数15

1个答案

1

在Dockerfile中,COPYADD指令都是用来将文件从构建环境复制到镜像中的。它们的功能相似,但它们之间有一些关键区别,这些区别使得在不同情况下选择一个而不是另一个更合适。

COPY 指令

COPY指令的功能比较直接,它的基本形式是:

dockerfile
COPY <源路径> <目标路径>

这个指令将从构建环境中的 <源路径> 复制文件到镜像文件系统上的 <目标路径>。例如:

dockerfile
COPY ./hello.txt /app/hello.txt

这行指令将把构建环境中的 hello.txt 文件复制到镜像中的 /app/hello.txt

ADD 指令

ADD 指令与 COPY 相似,但提供了一些额外的功能:

dockerfile
ADD <源路径> <目标路径>

除了复制文件,ADD 还可以:

  1. 自动解压缩归档文件:如果源文件是一个归档(例如 .tar 文件),ADD 会自动将其解压到 <目标路径>
  2. 支持从URL下载文件:如果 <源路径> 是一个URL,ADD 可以下载这个URL的内容到 <目标路径>

例如:

dockerfile
ADD https://example.com/example.tar.gz /app/

这行指令将从指定的URL下载 example.tar.gz 文件,并自动解压到 /app/ 目录中。

选择 COPY 还是 ADD

尽管 ADD 提供了一些额外的功能,Docker官方建议尽可能使用 COPY,因为它的行为更为直接和可预测。如果你不需要 ADD 的额外功能(如自动解压缩或从URL下载文件),最好选择 COPY,以保持Dockerfile的简洁和明确。

总结,虽然 COPYADD 都可以用来从构建环境复制文件到镜像中,但 COPY 是一个更简单和推荐使用的选择,除非你需要 ADD 的特殊功能。这样的选择有助于提高Docker镜像构建的可维护性。

2024年7月19日 17:18 回复

你的答案