📜  Dockerfile 中 COPY 和 ADD 命令的区别(1)

📅  最后修改于: 2023-12-03 15:14:46.665000             🧑  作者: Mango

Dockerfile中COPY和ADD命令的区别

在Docker中,Dockerfile是用来构建自定义镜像的脚本文件,Dockerfile中有很多关键字用来定义这些脚本内容。其中,COPY和ADD命令用来向镜像中添加文件和目录,这两个命令在功能上有所区别。

COPY命令

COPY命令用来将文件或目录从构建上下文(Dockerfile所在的目录)复制到镜像中。COPY命令的语法如下:

COPY <源路径> <目标路径>
  • 源路径:是相对于Dockerfile所在目录的文件或目录。
  • 目标路径:是在镜像中存储这个文件或目录的路径。这个路径必须以“/”开头,否则就会被认为是相对于源路径构建的。

例如:

COPY app.py /app/

这个命令会将当前目录下的app.py复制到镜像的/app/目录中。

ADD命令

ADD命令也可以将文件或目录从构建上下文复制到镜像中,但是它比COPY命令更强大。

ADD命令的语法如下:

ADD <源路径> <目标路径>

除了COPY命令之外,ADD命令还支持以下功能:

  1. 自动解压缩

如果源路径是一个压缩文件,ADD命令会自动解压缩这个文件。例如:

ADD app.tar.gz /app/

这个命令会将当前目录下的app.tar.gz文件解压缩到镜像的/app/目录中。

  1. 支持URL

如果源路径是一个URL,ADD命令会自动下载这个URL对应的文件。例如:

ADD http://example.com/app.tar.gz /app/

这个命令会从http://example.com/app.tar.gz下载对应的文件,并解压缩到镜像的/app/目录中。

综上所述,COPY命令用来复制文件或目录,ADD命令除了复制文件或目录,还支持自动解压缩和URL下载的功能。但是,由于自动解压缩和URL下载的功能可能会影响镜像构建的可重复性,因此在一般情况下,建议使用COPY命令来添加文件和目录。