Dockerfile中COPY和ADD

简介: 在 Dockerfile 中有COPY 和 ADD两个指令, 它们允许我们将文件从特定位置复制到 Docker 镜像中。它们有着非常类似的作用,又有细微的差别。

一、COPY指令

COPY 指令从 <src> 复制新的文件或目录,并将它们添加到 Docker 容器文件系统的 <dest> 的路径下。

1.COPY 两种格式:

  • COPY [--chown=<user>:<group>] <src>... <dest>
  • COPY [--chown=<user>:<group>] ["<src>",... "<dest>"](包含空格的路径需要使用这种格式)

2.COPY使用规则

复制指令必须遵循以下规则:

  1. <src>路径必须在构建的上下文中;您不能复制../something/something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程。
  2. 如果<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使用规则

  1. <src>路径必须在构建的上下文中;您不能添加../something/something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程。
  2. 如果<src>是一个URL并且<dest>没有以斜杠结尾,则会从URL下载一个文件并复制到<dest>。
  3. 如果<src>是一个URL,并且<dest>以斜杠结尾,则从URL推断文件名,并将文件下载到<dest>/<filename>。例如,添加http://example.com/foobar /将创建文件/foobar。URL必须有一个非平凡的路径,以便在这种情况下可以找到适当的文件名(http://example.com 不起作用)。
  4. 如果<src>是一个目录,则复制该目录的全部内容,包括文件系统元数据。

三、实战

  1. To add all files starting with “hom”:copy以"hom" 开头的所有文件到镜像的/mydir/目录
COPY hom* /mydir/
  1. 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)。


相关文章
|
缓存 Linux Go
Dockerfile(11) - COPY 指令详解
Dockerfile(11) - COPY 指令详解
3128 0
掌握销售之道:深入学习ERP系统的销售与客户关系管理模块
掌握销售之道:深入学习ERP系统的销售与客户关系管理模块
927 8
|
4月前
|
数据采集 监控 BI
RPA与爬虫的本质区别:企业自动化如何选对工具?
RPA与网络爬虫虽同属自动化技术,但定位迥异。RPA模拟人工操作,实现跨系统流程自动化,适用于企业内部业务处理;爬虫则专注网页数据采集,面临合规挑战。企业应根据操作场景与数据来源合理选用。
753 0
|
数据库 Python Windows
Python:Pycharm安装指南
1. 双击安装程序,点击Next。 2. 选择安装路径,Next。 3. 默认选项,添加环境变量,Next。 4. 保持默认设置,点击Install。 5. 安装完成后选择是否立即重启。
300 2
Python:Pycharm安装指南
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
276 3
|
机器学习/深度学习 人工智能 算法
【机器学习】Q-Learning算法:在序列决策问题中的实践与探索
【机器学习】Q-Learning算法:在序列决策问题中的实践与探索
407 0
【机器学习】Q-Learning算法:在序列决策问题中的实践与探索
将BGR色彩空间转换为YCrCb色彩空间
【5月更文挑战第13天】将BGR色彩空间转换为YCrCb色彩空间。
252 2
|
SQL 关系型数据库 MySQL
一文带你了解MySQL的DCL语句
一文带你了解MySQL的DCL语句
770 1
|
安全 Java 关系型数据库
基于Java的超市进销存管理系统
基于Java的超市进销存管理系统