美文网首页
dockerfile中add和copy的区别

dockerfile中add和copy的区别

作者: 悟空嘿 | 来源:发表于2024-09-03 10:43 被阅读0次

    在 Dockerfile 中,ADDCOPY 都是用于将文件或目录从宿主机复制到镜像中的指令,但它们有一些关键的区别:

    1. 功能差异

      • COPY:只用于将文件或目录从源路径复制到目标路径。它比较简单,没有其他功能。
      • ADD:除了具有 COPY 的功能外,还能够自动解压缩从源路径复制的压缩文件(如 .tar.gz.bz2 等)。此外,ADD 还可以通过指定 URL 从远程 URL 下载文件并将其复制到目标路径。
    2. 使用场景

      • COPY:推荐在只需要复制文件或目录时使用 COPY,因为它的功能比较简单且更明确,能够提升 Dockerfile 的可读性。
      • ADD:适合在需要解压缩文件或从远程 URL 下载文件的场景下使用,但如果不需要这些额外功能,使用 COPY 会是更好的选择。
    3. 语法

      • COPYCOPY <源路径>... <目标路径>
      • ADDADD <源路径>... <目标路径>

    示例

    • 使用 COPY 复制本地文件:

      COPY ./myfile.txt /app/myfile.txt
      
    • 使用 ADD 复制并解压缩文件:

      ADD test.tar.gz /app/
      
    • 使用 ADD 从 URL 下载文件:

    # 基础镜像
    FROM ubuntu:20.04
    # 设置环境变量
    ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
    # 设置工作目录
    WORKDIR /usr/src/app
    # 复制应用程序文件
    # COPY ./target  /usr/src/app\
    COPY ./target/addtest.txt  /usr/src/app/
    ADD ./target/test.tar.gz /usr/src/app/
    # 安装依赖
    RUN apt-get update && apt-get install -y python3-pip
    RUN pip3 install --no-cache-dir -r requirements.txt
    # 暴露端口
    EXPOSE 8080
    # 运行应用程序
    CMD ["python3", "app.py"]
    
    • 执行build命令,创建镜像:
     docker build -f Dockerfile.nginx -t addnginx:v1 .
    
    • test.tar.gz中的文件:


      image.png
    • 容器对应路径中的文件如下,可见test.tar.gz已经被解压出来了


      image.png

    总结来说,如果只是简单地复制文件或目录,使用 COPY 更为合适;如果需要解压缩或下载远程文件,可以选择使用 ADD

    相关文章

      网友评论

          本文标题:dockerfile中add和copy的区别

          本文链接:https://www.haomeiwen.com/subject/bkvcljtx.html