44-Dockerfile-ADD/COPY指令


前言

  • 本篇来学习下Dockerfile中的AGR/ENV指令

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

猜你喜欢

转载自blog.csdn.net/IT_heima/article/details/129652344
今日推荐