一、COPY指令
COPY
指令从 <src>
复制新的文件或目录,并将它们添加到 Docker 容器文件系统的 <dest>
的路径下。
1.COPY
两种格式:
COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
(包含空格的路径需要使用这种格式)
2.COPY使用规则
复制指令必须遵循以下规则:
- <src>路径必须在构建的上下文中;您不能复制../something/something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程。
- 如果<src>是一个目录,则复制该目录的全部内容,包括文件系统元数据。
二、ADD指令
1.ADD
两种格式:
ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
(包含空格的路径使用这种格式)
2. ADD 额外的功能 :
(1).ADD 指令可以让你使用 URL 作为 <src> 参数。当遇到 URL 时候,可以通过 URL 下载文件并且复制到 <dest>。
(2).ADD 的另一个特性是自动解压文件的能力。如果 <src> 参数是一个可识别压缩格式(tar, gzip, bzip2, …)的本地文件(注:无法实现同时下载并解压),就会被解压到指定容器文件系统的路径 <dest> 下。
3.ADD使用规则
- <src>路径必须在构建的上下文中;您不能添加../something/something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程。
- 如果<src>是一个URL并且<dest>没有以斜杠结尾,则会从URL下载一个文件并复制到<dest>。
- 如果<src>是一个URL,并且<dest>以斜杠结尾,则从URL推断文件名,并将文件下载到<dest>/<filename>。例如,添加http://example.com/foobar /将创建文件/foobar。URL必须有一个非平凡的路径,以便在这种情况下可以找到适当的文件名(http://example.com 不起作用)。
- 如果<src>是一个目录,则复制该目录的全部内容,包括文件系统元数据。
三、实战
- To add all files starting with “hom”:copy以"hom" 开头的所有文件到镜像的/mydir/目录
COPY hom* /mydir/
- The example below uses a relative path, and adds “test.txt” to
<WORKDIR>/relativeDir/
: copy上下文中的test.txt到 工作目录的relativeDir目录
COPY test.txt relativeDir/
四、总结
对于不需要自动解压的文件或目录,应该始终使用 COPY指令
。
最后,认准一个原则:总是使用 COPY
(除非我们明确需要 ADD
)。