Quando si crea un file Docker, ci sono due comandi che è possibile utilizzare per copiare file / directory in esso - ADD
e COPY
. Sebbene vi siano lievi differenze nella portata della loro funzione, svolgono essenzialmente lo stesso compito.
Quindi, perché abbiamo due comandi e come sappiamo quando usare l'uno o l'altro?
ADD
COMANDO DOCKER
Cominciamo notando che il ADD
comando è più vecchio di COPY
. Dal lancio della piattaforma Docker, le ADD
istruzioni fanno parte del suo elenco di comandi.
Il comando copia file / directory in un file system del contenitore specificato.
La sintassi di base per il ADD
comando è:
ADD <src> … <dest>
Include la fonte che si desidera copiare ( <src>
) seguita dalla destinazione in cui si desidera memorizzarlo ( <dest>
). Se l'origine è una directory,ADD
copia tutto al suo interno (inclusi i metadati del file system).
Ad esempio, se il file è disponibile localmente e si desidera aggiungerlo alla directory di un'immagine, digitare:
ADD /source/file/path /destination/path
ADD
può anche copiare file da un URL. Può scaricare un file esterno e copiarlo nella destinazione desiderata. Per esempio:
ADD http://source.file/url /destination/path
Un'ulteriore caratteristica è che copia i file compressi, estraendo automaticamente il contenuto nella destinazione specificata. Questa funzione si applica solo ai file / directory compressi memorizzati localmente.
ADD source.file.tar.gz /temp
Tieni presente che non puoi scaricare ed estrarre un file / directory compresso da un URL. Il comando non decomprime i pacchetti esterni durante la copia nel file system locale.
DOCKER COPY
COMANDO
A causa di alcuni problemi di funzionalità, Docker ha dovuto introdurre un comando aggiuntivo per la duplicazione dei contenuti - COPY
.
A differenza del ADD
comando strettamente correlato , COPY
ha solo una funzione assegnata. Il suo ruolo è duplicare file / directory in una posizione specificata nel loro formato esistente. Ciò significa che non si occupa dell'estrazione di un file compresso, ma piuttosto lo copia così com'è.
L'istruzione può essere utilizzata solo per i file memorizzati localmente. Pertanto, non è possibile utilizzarlo con gli URL per copiare file esterni nel proprio contenitore.
Per utilizzare l' COPY
istruzione, seguire il formato di comando di base:
Digita l'origine e il punto in cui desideri che il comando estragga il contenuto come segue:
COPY <src> … <dest>
Per esempio:
COPY /source/file/path /destination/path
Quale comando usare? (Best Practice)
Considerando le circostanze in cui è COPY
stato introdotto il comando, è evidente che mantenere ADD
era una questione di necessità. Docker ha rilasciato un documento ufficiale che descrive le migliori pratiche per la scrittura di Dockerfile, che sconsiglia esplicitamente di usare il ADD
comando.
Note sulla documentazione ufficiale di Docker che COPY
dovrebbero essere sempre le istruzioni di riferimento in quanto più trasparenti di ADD
.
Se è necessario copiare dal contesto di compilazione locale in un contenitore, attenersi all'utilizzo COPY
.
Il team Docker inoltre scoraggia fortemente l'utilizzo ADD
per scaricare e copiare un pacchetto da un URL. Invece, è più sicuro ed efficiente usare wget o curl all'interno di un RUN
comando. In questo modo, si evita di creare un ulteriore livello di immagine e si risparmia spazio.