44-Dockerfile-ADD/COPY指令

ADD和COPY是Dockerfile中用于将文件或目录复制到镜像内的指令。ADD有自动下载和解压功能,COPY则没有。当ADD的源文件变化时,后续所有指令的缓存会被清除。COPY支持从其他构建阶段复制文件,--from标志可用于此目的。推荐使用COPY,除非需要远程URL下载或解压功能。
摘要由CSDN通过智能技术生成


前言

  • 本篇来学习下Dockerfile中的ADD/COPY指令

ADD

作用
  • 可以将上下文指定的内容添加(复制)到镜像中,如果是压缩包,ADD 会自动解压;如果是远程 URL ,ADD 会自动下载;但是,ADD 并没有自动下载远程压缩文件并解压的功能
格式
1. ADD <src>... <dest>
2. ADD ["<src>",... "<dest>"]
  • 说明

    • <src>:可以是 Dockerfile 所在目录的一个相对路径(文件或目录);也可以是一个 URL(如果写成一个url,那么ADD就类似于wget命令);还可以是一个 tar 文件(自动解压为目录)
    • <dest>:可以是镜像内绝对路径,或者相对于工作目录(WORKDIR)的相对路径
    • <src>为一个目录的时候,会自动把目录下的文件复制过去,目录本身不会复制
    • 如果<src>为多个文件, <dest>一定要是一个目录
    • 如果 <src>是 URL ,并且 <dest>不以 / 结尾,那么就会从 URL 下载文件并将其复制为 dest(名称)。
    • 如果 <src>是 URL ,并且 <dest>以 / 结尾,会自动推断出文件的名称(URL 的最后一部分)并保存到 dest(目录)中。
    • 路径:支持正则表达式, ADD   *.py    /case
  • 注意

    • <src> 的内容发生变化,第一个遇到的 ADD 指令将使来自 Dockerfile 的所有后续指令的缓存无效,这包括使 RUN 指令的缓存无效
    • <src>路径必须在构建的上下文,不能使用 …/…/xxx 这种方式,因为 Docker 构建的第一步是将上下文目录(包括子目录)发送给 Docker 的守护进程。
使用示例
  • 通配符
# 把py结尾文件添加到镜像文件系统的/case/目录下
ADD *.py /case
# ? 匹配 0 或 1 个字符,把 requerments.txt 文件添加到 /dest 目录下
ADD requerment?.txt  /dest
  • 路径必须在构建的上下文中
# 正确写法 test.txt 是相对路径,相对于构建上下文
ADD test.txt /dest/

# 错误写法 这个找的就是构建上下文的上级目录的 test.txt
ADD ../test.txt /dest/

# 这个找的是本机根目录下的 test.txt
ADD /test.txt /dest/
  • 不存在,路径中所有缺失的目录都会自动创建
ADD /test.txt /dest/case/test

COPY

作用
  • 复制内容到镜像
格式
COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
  • 说明
    • –chown:仅在用于构建 Linux 容器的 Dockerfile 上受支持,而在 Windows 容器上不起作用
使用示例
  • 标志 --from=
# 第一构建阶段:将仅用于生成 requirements.txt 文件
FROM tiangolo/uvicorn-gunicorn:python3.9 as requirements-stage

# 将当前工作目录设置为 /tmp
WORKDIR /tmp

# 生成 requirements.txt
RUN touch requirements.txt

# 第二构建阶段,在这往后的任何内容都将保留在最终容器映像中
FROM python:3.9

# 将当前工作目录设置为 /code
WORKDIR /code

# 从第一个阶段复制 requirements.txt;这个文件只存在于前一个 Docker 阶段,这就是使用 --from-requirements-stage 复制它的原因
COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt

# 运行命令
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

ADD和COPY的区别

  • ADD 支持添加远程 url 和自动提取压缩格式的文件,COPY 只允许从本机中复制文件
  • COPY 支持从其他构建阶段中复制源文件(–from)
  • 根据官方 Dockerfile 最佳实践,除非真的需要从远程 url 添加文件或自动提取压缩文件才用 ADD,其他情况一律使用 COPY
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习de测试小白

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值