What is the difference between the `COPY` and `ADD` commands in a Dockerfile?

What is the difference between the COPY and ADD commands in a Dockerfile, and when would I use one over the other?


COPY <src> <dest>

The COPY instruction will copy new files from <src> and add them to the container's filesystem at path <dest>


ADD <src> <dest>

The ADD instruction will copy new files from <src> and add them to the container's filesystem at path <dest> .


You should check the ADD and COPY documentation for an exhaustive description of their behaviours, but in a nutshell the major difference is that ADD can do more than COPY :

  • ADD allows <src> to be an URL
  • If the <src> parameter of ADD is an archive in a recognised compression format, it will be unpacked
  • Note that the Best practices for writing Dockerfiles suggests using COPY where the magic of ADD is not required. Otherwise you (since you had to lookup this answer) are likely to get surprised someday when you mean to copy keep_this_archive_intact.tar.gz into your container, but instead you spray the contents onto your filesystem.


    COPY is

    Same as 'ADD', but without the tar and remote URL handling.

    Reference straight from the source code.


    There is some official documentation on that point: Best Practices for Writing Dockerfiles

    Because image size matters, using ADD to fetch packages from remote URLs is strongly discouraged; you should use curl or wget instead. That way you can delete the files you no longer need after they've been extracted and you won't have to add another layer in your image.

    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
    

    For other items (files, directories) that do not require ADD 's tar auto-extraction capability, you should always use COPY .

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

    上一篇: Docker将文件从主机复制到容器

    下一篇: Dockerfile中的`COPY`和`ADD`命令有什么区别?