Dockerfile中的`COPY`和`ADD`命令有什么区别?

Dockerfile中COPYADD命令之间有什么区别,以及我何时使用另一个命令?


COPY <src> <dest>

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


ADD <src> <dest>

ADD指令将从<src>复制新文件,并将它们添加到路径<dest>的容器文件系统中。


您应该检查ADDCOPY文档以详细描述其行为,但简而言之,主要区别在于ADD可以做的不仅仅是COPY

  • ADD允许<src>成为一个URL
  • 如果ADD<src>参数是以可识别的压缩格式存档,则它将被解压缩
  • 请注意,编写Dockerfiles的最佳实践建议使用COPY ,其中不需要ADD的魔力。 否则,当你想将keep_this_archive_intact.tar.gz复制到你的容器中时,你(因为你必须查找这个答案)有可能会感到惊讶,但是你可以将内容喷到你的文件系统上。


    COPY

    与“ADD”相同,但没有tar和远程URL处理。

    直接从源代码中引用。


    关于这一点有一些官方文档:编写Dockerfiles的最佳实践

    由于图像大小很重要,因此强烈建议使用ADD从远程URL获取软件包; 你应该使用curlwget代替。 通过这种方式,您可以删除在解压缩后不再需要的文件,而无需在图像中添加其他图层。

    RUN mkdir -p /usr/src/things 
      && curl -SL http://example.com/big.tar.gz 
        | tar -xJC /usr/src/things 
      && make -C /usr/src/things all
    

    对于不需要ADD的tar自动提取功能的其他项目(文件,目录),您应该始终使用COPY

    链接地址: http://www.djcxy.com/p/18257.html

    上一篇: What is the difference between the `COPY` and `ADD` commands in a Dockerfile?

    下一篇: How to enter in a Docker container already running with a new TTY