问答题875/1053DockerFile中的命令COPY和ADD命令有什么区别?

难度:
2021-11-02 创建

参考答案:

在 Dockerfile 中,COPYADD 都用于将文件和目录从主机复制到 Docker 镜像中的指定位置,但它们之间有一些细微的区别。

1. COPY 命令

COPY 命令是最基本的文件复制命令,用于将本地文件或目录复制到 Docker 镜像中的指定路径。

语法:

1COPY <src> <dest>
  • <src>:指定源文件或目录(相对于 Dockerfile 所在路径)。
  • <dest>:指定目标路径(在容器内的路径)。

主要特点:

  • 简单:只会复制本地文件到镜像中,不会对文件进行解压或处理。
  • 没有额外的功能COPY 不支持从远程 URL 下载文件,也不支持自动解压文件。

示例:

1COPY ./local-file.txt /app/local-file.txt

将本地的 local-file.txt 文件复制到镜像中的 /app/ 目录下。


2. ADD 命令

ADD 命令比 COPY 更为复杂,功能更强大。它不仅可以像 COPY 一样复制本地文件和目录,还具有额外的功能。

语法:

1ADD <src> <dest>
  • <src>:指定源文件或目录,可以是本地文件/目录,也可以是一个 URL。
  • <dest>:指定目标路径(在容器内的路径)。

主要特点:

  • 解压:如果源文件是一个压缩包(如 .tar.tar.gz.zip 等格式),ADD 会自动解压文件到目标路径。
  • 支持 URLADD 可以从远程 URL 下载文件并将其添加到镜像中。

示例:

1ADD ./local-file.tar.gz /app/

如果 local-file.tar.gz 是一个压缩文件,ADD 会自动解压文件到 /app/ 目录。

1ADD https://example.com/file.tar.gz /app/

ADD 可以直接从远程 URL 下载文件并将其添加到镜像中。


3. 区别总结

特性COPYADD
功能仅将文件或目录复制到镜像中除了复制文件外,还支持解压文件,支持 URL 下载
支持解压不支持支持自动解压 .tar 格式文件
支持 URL不支持支持通过 URL 下载文件

4. 使用建议

  • 优先使用 COPY:对于简单的文件复制操作,推荐使用 COPY,因为它更为明确和简单,也能提升构建速度。
  • 使用 ADD 仅在需要时:只有在你需要从 URL 下载文件或自动解压压缩文件时,才考虑使用 ADD。对于其他情况,尽量避免使用 ADD,以减少不必要的复杂性。

示例对比:

使用 COPY 复制文件:

1COPY ./file.txt /app/

使用 ADD 解压文件:

1ADD ./file.tar.gz /app/

ADD 会解压 file.tar.gz/app/ 目录中。

最近更新时间:2024-12-09