详解:Dockerfile 中 ADD 与 COPY 的区别

详解:Dockerfile 中 ADD 与 COPY 的区别

在 Dockerfile 文件中,ADD 和 COPY 都是用于将文件从本地复制到 Docker 镜像中。然而,它们有着不同的用法和作用。在本文中,我们将详细解释 ADD 和 COPY 的区别,以便开发人员可以根据需要做出最佳选择。

  1. COPY 的作用

COPY 命令用于将本地文件复制到 Docker 镜像中。在 COPY 命令中,源文件的路径必须与 Dockerfile 文件在同一目录或子目录中。复制过程可以包括多个源文件和目标目录,如:COPY app.js views/ ./

  1. ADD 的作用

除了 COPY 外,还可以使用 ADD 命令将本地文件复制到 Docker 镜像中。不同之处在于,ADD 命令可以根据需要自动解压缩本地 tar 文件和 URL,并将其复制到 Docker 镜像中。如果需要,ADD 命令还可以从源文件中提取文件并将其复制到目标位置。例如,ADD 命令可以自动解压缩一个名为 app.tar.gz 的 tar 文件,并将其复制到 Docker 镜像中。

  1. 区别

虽然 ADD 可以自动解压文件和 URL,但 COPY 被设计为只能将本地文件复制到 Docker 镜像中。因此,ADD 应该只用于复制可解压的 tar 文件或复制其他源目录中的文件。

另一个区别是,复制文件时,ADD 可以在 Docker 中解压压缩文件,这意味着在 Dockerfile 中我们不需要手动解压压缩文件。但是,COPY 只能复制文件或目录,不能解压压缩文件或目录。

最后,复制源文件时,可以使用 COPY 命令指定所有者和组(chown),但在 ADD 中,不能指定所有者和组。

  1. 示例代码

以下是一个使用 COPY 命令的示例 Dockerfile:

FROM node:latest COPY app.js app.js COPY views/ views/

以下是一个使用 ADD 命令的示例 Dockerfile:

FROM node:latest ADD app.tar.gz /app ADD https://github.com/user/repo/archive/master.zip /app ADD app.js /app

结论

在使用 Dockerfile 时,COPY 和 ADD 都是将本地文件复制到 Docker 镜像的有效方法,但是要根据需要选择最合适的。如果您只需要复制文件并且不需要解压缩压缩文件,那么使用 COPY 命令是最佳选择。如果您需要自动解压可解压的文件或使用 URL 来复制文件,并且不需要指定所有者和组,请使用 ADD 命令。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66ffc37479dfe848e7cca856