当前位置: 首页 > news >正文

Dockerfile Add和Copy的区别。

Dockerfile 中,ADDCOPY 都用于将文件或目录从构建上下文(通常是 Dockerfile 所在的目录)复制到 Docker 镜像中,但它们有一些关键区别:


1. COPY 指令

COPY 主要用于复制本地文件或目录到容器的指定路径。

📌 语法

COPY <源路径> <目标路径>

📌 特性

仅支持复制本地文件或目录(不能从远程 URL 复制)。
不会自动解压 .tar 压缩包(需要手动 RUN tar -xvf)。
适用于简单的文件复制操作

📌 示例

COPY index.html /usr/share/nginx/html/
  • 这会将 index.html 文件复制到 /usr/share/nginx/html/ 目录下。
COPY src/ /app/
  • 这会将 src/ 目录的所有内容复制到 /app/ 目录下。

2. ADD 指令

ADDCOPY 更强大,除了能复制文件,它还能处理远程 URL 下载自动解压 .tar 压缩包

📌 语法

ADD <源路径> <目标路径>

📌 特性

可以复制本地文件和目录(与 COPY 相同)。
支持远程 URL 下载COPY 不支持)。
自动解压 .tar 文件(但不会解压 .zip)。
适用于需要自动解压或者拉取远程资源的场景

📌 示例

ADD example.tar.gz /app/
  • ADD 自动解压 example.tar.gz/app/
ADD https://example.com/sample.txt /app/sample.txt
  • ADD 会从 URL 下载 sample.txt 并存储到 /app/sample.txt

3. ADD vs COPY 选择

特性ADDCOPY
复制本地文件/目录
支持远程 URL 下载
自动解压 .tar 文件
适用于文件复制更推荐

📌 何时使用 COPY

  • 推荐使用 COPY,因为它更简单、明确,避免 ADD 可能带来的副作用(如意外解压)。

📌 何时使用 ADD

  • 需要自动解压 .tar.gz 文件到指定目录时。
  • 需要从远程 URL 下载文件时(尽管更推荐 RUN wgetRUN curl)。

4. 最佳实践

  • 尽量使用 COPY,因为 ADD 的功能更复杂,可能会导致意外行为(如 .tar 自动解压)。
  • 如果需要解压 .tar,可以手动使用 RUN tar -xvf,避免 ADD 带来的不可控行为。
  • 如果需要下载远程文件,更推荐 RUN wgetRUN curl,而不是 ADD,这样可以提高 Docker 层的可复用性。

📌 推荐方式

# 推荐方式 1: 复制本地文件
COPY myfile.txt /app/

# 推荐方式 2: 下载远程文件(避免用 ADD)
RUN wget -O /app/sample.txt https://example.com/sample.txt

# 推荐方式 3: 解压 .tar 文件(避免用 ADD)
COPY example.tar.gz /app/
RUN tar -xzf /app/example.tar.gz -C /app/ && rm /app/example.tar.gz

总结

COPY 更推荐,因为它只做文件复制,避免 ADD 的额外功能带来意外行为。
ADD 适用于特殊场景,如自动解压 .tar.gz 或远程下载(但 RUN wget/curl 更灵活)。
Docker 官方推荐优先使用 COPY,除非 ADD 的特性确实有用。

相关文章:

  • Amazon RDS ProxySQL 探索(一)
  • C语言数据结构:数组
  • 【vue】路由出口监听组件钩子
  • 【Go学习】04-4-Gorm框架-增删改查事务钩子
  • 计算机网络——DHCP
  • 如何精准打点解决卡牌、SLG、开放大世界、放置类游戏卡顿难题
  • body-parser 与 express.json()、express.urlencoded() 会冲突
  • 大数据学习(65)- Hue详解
  • 【后端】【django drf】Django DRF API 编写规范(程序设计规则)
  • 地理信息系统(ArcGIS)在水文水资源及水环境中的应用:空间数据管理‌、空间分析功能‌、‌可视化表达‌
  • ICLR 2025|DAMO开发者矩阵合作专场
  • 用sphinx-doc整理文档#2
  • µCOS-III从入门到精通 第十五章(µC/OS-III内存管理)
  • windows 下用docker 部署nginx
  • 蓝桥杯 3514子串简写
  • 【python】一文掌握 Conda 指令 (anaconda备忘清单)
  • 【每日学点HarmonyOS Next知识】防截屏、加载不同View、函数传参、加载中效果、沉浸式底部状态栏
  • 第八节:红黑树(初阶)
  • 容易混淆的概念:requests 库 和 Flask 的 request
  • 【3DMAX科研绘图】3DMAX晶体网络插件CrystalNet使用方法
  • 菏泽网站建设招聘/seo搜索引擎专员
  • 360免费wifi连不上/青岛网站建设方案优化
  • 南通动态网站建设/软文范例
  • 企业网站管理系统cms源码下载/网络软文营销
  • 图片网站推广/软文写作经验是什么
  • 做网站每年需付费吗/seo查询官方网站