[Kubernetes] Differenza tra comando COPY e ADD

Rispondi
Roberto
Amministratore
Messaggi: 160
Iscritto il: 19/12/2009, 19:30

[Kubernetes] Differenza tra comando COPY e ADD

Messaggio da Roberto »

In un Dockerfile si possono utilizzare in maniera quasi equivalente i comandi COPY e ADD, ma è importante comprendere la differenza tra i due e quando è appropriato utilizzare l'uno piuttosto che l'altro.

Ecco una rapida panoramica delle differenze tra COPY e ADD:
  1. COPY
    • E' utilizzato per copiare file e directory dal contesto di build (la directory in cui si trova il Dockerfile e i file/directory ad esso associati) al filesystem del container
    • E' semplice e trasparente, copia i file così come sono, mantenendo tutti i loro metadati, senza alcuna elaborazione aggiuntiva
  2. ADD
    • Ha tutte le funzionalità di COPY, ma aggiunge anche la capacità di gestire URL come sorgenti (permettendo di scaricare file direttamente da un URL nel container) e di decomprimere automaticamente archivi compressi nel filesystem del container
    • A causa della sua maggiore complessità e delle funzionalità aggiuntive, ADD è meno trasparente rispetto a COPY e può avere comportamenti inaspettati (ad esempio, se non si desidera la decompressione automatica).
Pertanto istruzioni come:

Codice: Seleziona tutto

COPY scripts/*.jar /opt/scripts/
COPY themes/ /opt/themes/
potrebbero essere sostituite da:

Codice: Seleziona tutto

ADD scripts/*.jar /opt/scripts/
ADD themes/ /opt/themes/
Tuttavia, se non hai bisogno delle funzionalità aggiuntive di ADD (come il download da URL o la decompressione automatica), è generalmente consigliabile utilizzare COPY per mantenere il Dockerfile più semplice e chiaro.

Dunque COPY è spesso la scelta preferita per la copia di file locali perché è più diretto e meno incline a comportamenti inaspettati.
Rispondi