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 评论