Question
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>
.
Answer
You should check the
ADD
and
COPY
documentation
for a more detailed description of their behaviors, but in a nutshell, the
major difference is that ADD
can do more than COPY
:
ADD
allows<src>
to be a URL- Referring to comments below, the
ADD
documentation states that:
If is a local tar archive in a recognized compression format (identity, gzip, bzip2 or xz) then it is unpacked as a directory. Resources from remote URLs are not decompressed.
Note that the [Best practices for writing
Dockerfiles](https://docs.docker.com/develop/develop-images/instructions/#add-
or-copy) suggests using COPY
where the magic of ADD
is not required.
Otherwise, you ( since you had to look up 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.