Dockerfile中COPY和ADD
发布时间:2021-11-19 点击数:579
一、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)。
上一篇:OushuDB 的主要功能 下一篇:阿里云安全认证的等级 阿里云认证含金量高吗?