ADD 和 COPY 指令有什么区别?

· 约 2 分钟读完 · 第 64 / 115 章

推荐答案

ADD 和 COPY 指令在 Dockerfile 中用于将文件或目录从主机复制到镜像中,但它们有以下主要区别:

  1. 功能范围:

    • ADD 指令不仅可以复制文件或目录,还可以自动解压 tar 文件(包括 gzip、bzip2 或 xz 压缩格式)并从 URL 下载文件。
    • COPY 指令仅用于复制文件或目录,不支持自动解压或从 URL 下载文件。
  2. 使用场景:

    • 如果需要从 URL 下载文件或自动解压 tar 文件,使用 ADD。
    • 如果只是简单地将文件或目录复制到镜像中,推荐使用 COPY,因为它更明确且不易引起误解。
  3. 最佳实践:

    • 在大多数情况下,优先使用 COPY,因为它更简单、更透明,避免了 ADD 可能带来的意外行为(如自动解压或下载)。

本题详细解读

1. ADD 指令

  • 功能:

    • 复制文件或目录到镜像中。
    • 自动解压 tar 文件(包括 gzip、bzip2 或 xz 压缩格式)。
    • 从 URL 下载文件并复制到镜像中。
  • 示例:

  • 注意事项:

    • 自动解压功能可能会导致意外的文件结构变化。
    • 从 URL 下载文件时,文件不会自动解压。

2. COPY 指令

  • 功能:

    • 仅复制文件或目录到镜像中,不支持自动解压或从 URL 下载文件。
  • 示例:

  • 注意事项:

    • 行为明确,不会自动解压或下载文件。
    • 更适合简单的文件复制操作。

3. 选择依据

  • 如果需要从 URL 下载文件或自动解压 tar 文件,使用 ADD。
  • 如果只是简单地将文件或目录复制到镜像中,使用 COPY。

4. 最佳实践

  • 优先使用 COPY,因为它更简单、更透明。
  • 仅在需要 ADD 的特殊功能时使用 ADD,并确保理解其行为。