1.简介
创建Dockerfile时,通常需要将文件从主机系统传输到Docker映像中。这些可能是属性文件,本机库或我们的应用程序在运行时需要的其他静态内容。
Dockerfile规范提供了两种将文件从源系统复制到映像的方法: COPY和ADD指令。
在本文中,我们将研究它们之间的区别以及何时使用它们之间的区别。
2. COPY和ADD之间的区别
乍一看, COPY和ADD指令看起来相同。它们具有相同的语法:
COPY <source> <destination>
ADD <source> <destination>
两者都将文件从主机系统复制到Docker映像。
那有什么区别呢?简而言之, ADD指令比COPY更有能力。
尽管功能上相似,但ADD指令在两种方面更强大:
- 它可以处理远程URL
- 它可以自动提取tar文件
让我们更仔细地研究这些。
首先, ADD指令可以接受远程URL作为其source参数。另一方面, COPY指令只能接受本地文件。
请注意,使用ADD来获取远程文件并进行复制通常并不理想。这是因为该文件将增加整个Docker映像的大小。相反,我们应该使用curl或wget来获取远程文件,并在不再需要它们时将其删除。
其次, ADD指令将自动将tar文件扩展到映像文件系统中。尽管这可以减少构建映像所需的Dockerfile步骤数量,但并非在所有情况下都需要这样做。
请注意,仅当源文件在主机系统本地时才发生自动扩展。
3.何时使用ADD或COPY
根据Dockerfile最佳实践指南,除非特别需要ADD的两个附加功能之一,否则我们始终应首选COPY不是ADD 。
如上所述,使用ADD将远程文件复制到Docker映像中会创建一个额外的层并增加文件大小。如果我们改用wget或curl ,则可以在以后删除文件,它们不会成为Docker映像的永久部分。
此外,由于ADD命令会自动扩展tar文件和某些压缩格式,因此可能导致意外的文件被写入映像中的文件系统。
4。结论
在本快速教程中,我们已经看到了将文件复制到Docker映像中的两种主要方法: ADD和COPY 。尽管功能上相似,但大多数情况下首选COPY指令。这是因为ADD指令提供了应谨慎使用且仅在需要时使用的其他功能。
0 评论