From Docker Doc :
ADD or COPY
Although ADD
and COPY
are functionally similar, generally speaking, COPY
is preferred. That’s because it’s more transparent than ADD
. COPY
only supports the basic copying of local files into the container, while ADD
has some features (like local-only tar extraction and remote URL support) that are not immediately obvious. Consequently, the best use for ADD
is local tar file auto-extraction into the image, as in ADD rootfs.tar.xz /
.
If you have multiple Dockerfile
steps that use different files from your context, COPY
them individually, rather than all at once. This ensures that each step’s build cache is only invalidated (forcing the step to be re-run) if the specifically required files change.
For example:
COPY requirements.txt /tmp/
RUN pip install --requirement /tmp/requirements.txt
COPY . /tmp/
Results in fewer cache invalidations for the RUN
step, than if you put the COPY . /tmp/
before it.
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 don’t have to add another layer in your image. For example, you should avoid doing things like:
ADD https://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all
And instead, do something like:
RUN mkdir -p /usr/src/things \
&& curl -SL https://example.com/big.tar.xz \
| 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
.
Source : https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
RUN
, COPY
, ADD
create layers. Other instructions create temporary intermediate images, and do not increase the size of the build.
Aucun commentaire:
Enregistrer un commentaire
to criticize, to improve