Dockerfile中的COPY和ADD指令之间有什么区别?


原文地址:Dockerfile中的COPY和ADD指令之间有什么区别?

COPY和ADD是用于将文件和目录复制到Docker映像的类似指令。那有什么区别呢?

您是Docker的新手,并且正在学习使用Dockerfil e创建自定义Docker映像。

您会遇到各种各样的Dockerfile指令,例如FROM,RUN等。

然后,您遇到了COPY和ADD,并意识到这两个指令可以完成相同的工作。将文件和目录从主机复制到修改后的Docker映像。

Dockerfile中的COPY和ADD指令之间有什么区别?

为什么Dockerfile有两个用于同一任务的命令?两者之间有区别吗?确实。他们有相似的目标,但就行为而言,却是不同的。

让我为您解释。

Dockerfile add vs COPY

ADD和COPY均旨在向您的Docker映像添加目录和文件。

ADD指令相对较旧,并且能够复制文件和目录。ADD可以从外部URL中提取文件。如果它支持存档格式,它也可以提取压缩文件。如果ADD不支持存档格式,这有时也会造成问题。

如果ADD可以做到所有这些,为什么我们要进行COPY?这是因为到目前为止,Docker命令已经进行了多次重组。重点是提供一个简单,直接和更简化的命令结构。

COPY的引入是对ADD的直接替代。COPY只是复制文件和目录。就是这样。为了下载和提取文件,常规的Linux命令(例如curl和tar)与RUN指令一起使用。

这就是为什么现在建议使用COPY的原因,并且您只会在较旧的教程和文档中找到ADD。

ADD是较旧的指令,除了可以将文件复制到主机中的映像之外,还可以下载和提取文件。COPY只能复制文件和目录。这些天建议复制。

仔细看看ADD指令

ADD指令具有以下三种功能:

1.将本地文件复制到容器映像中

举例来说,如果要将主机系统上的本地文件从Docker镜像复制/home/user/application/opt/app,则可以在Dockerfile中包含以下指令:

ADD /home/user/application /opt/app

在此,仅将目录的内容/home/user/application复制到/opt/app包括其元数据在内的目录中。它不会复制application目录本身。

2.提取本地存储的tar文件

您还可以使用ADD指令提取格式为identitygzipbzip2xz的压缩档案。这些内容在您所构建的Docker映像的目标位置中被解压缩为目录。

ADD /home/user/test.tar.gz /opt

该行为类似于当您使用tar命令将tarball解压到主机系统上的特定目录时发生的情况。

3.从URL下载文件

它类似于wget -PDockerfiles的工作方式。在构建Docker映像时,您可以按照以下说明下载文件并将其存储在容器映像上的所需位置:

ADD https://filesamples.com/samples/document/pdf/sample2.pdf /home/user

生成图像后,可以在启动基于它的容器之前使用此PDF文档。这是许多独特的用例之一。

COPY指令

COPY指令是ADD指令的改进,旨在减轻Docker用户之间的混淆。它的功能只是一个-将文件或目录从主机上的源位置复制到Docker映像上的目标位置。

因此,基本上是上面讨论的ADD指令部分中的第一点。相应的指令为:

COPY /home/user/application /opt/app

作为最佳实践,Docker的开发人员正式建议使用以上说明以避免混淆。

Dockerfile中的COPY和ADD指令之间有什么区别?

因此,如果您只想复制文件或目录,则应仅使用COPY指令。尝试并尽可能避免使用ADD。将RUN指令与常规Linux命令一起使用以下载和提取文件。

希望您现在可以了解这两个说明之间的基本区别。要单独理解它们,您可以查看ADDCOPY的正式和完整参考。

评论

登录后评论

服务器优惠活动

Top