ADD 和 COPY 指令有什么区别?

推荐答案

ADDCOPY 指令在 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,并确保理解其行为。
纠错
反馈