详解:Dockerfile 中 ADD 与 COPY 的区别
在 Dockerfile 文件中,ADD 和 COPY 都是用于将文件从本地复制到 Docker 镜像中。然而,它们有着不同的用法和作用。在本文中,我们将详细解释 ADD 和 COPY 的区别,以便开发人员可以根据需要做出最佳选择。
- COPY 的作用
COPY 命令用于将本地文件复制到 Docker 镜像中。在 COPY 命令中,源文件的路径必须与 Dockerfile 文件在同一目录或子目录中。复制过程可以包括多个源文件和目标目录,如:COPY app.js views/ ./
- ADD 的作用
除了 COPY 外,还可以使用 ADD 命令将本地文件复制到 Docker 镜像中。不同之处在于,ADD 命令可以根据需要自动解压缩本地 tar 文件和 URL,并将其复制到 Docker 镜像中。如果需要,ADD 命令还可以从源文件中提取文件并将其复制到目标位置。例如,ADD 命令可以自动解压缩一个名为 app.tar.gz 的 tar 文件,并将其复制到 Docker 镜像中。
- 区别
虽然 ADD 可以自动解压文件和 URL,但 COPY 被设计为只能将本地文件复制到 Docker 镜像中。因此,ADD 应该只用于复制可解压的 tar 文件或复制其他源目录中的文件。
另一个区别是,复制文件时,ADD 可以在 Docker 中解压压缩文件,这意味着在 Dockerfile 中我们不需要手动解压压缩文件。但是,COPY 只能复制文件或目录,不能解压压缩文件或目录。
最后,复制源文件时,可以使用 COPY 命令指定所有者和组(chown),但在 ADD 中,不能指定所有者和组。
- 示例代码
以下是一个使用 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