GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Docker ADD vs. COPY:quali sono le differenze?

Introduzione

Quando crei un Dockerfile, ci sono due comandi che puoi usare per copiare file/directory al suo interno:ADD e COPY . Sebbene vi siano lievi differenze nell'ambito della loro funzione, svolgono essenzialmente lo stesso compito.

Allora, perché abbiamo due comandi e come facciamo a sapere quando usare l'uno o l'altro?

In questo articolo spieghiamo ogni comando, analizziamo Docker ADD vs COPY e ti diciamo quale usare.

Comando AGGIUNGI Docker

Iniziamo notando che il ADD il comando è più vecchio di COPY . Dal lancio della piattaforma Docker, il ADD l'istruzione fa parte del suo elenco di comandi.

Il comando copia file/directory in un file system del contenitore specificato.

La sintassi di base per ADD il comando è:

ADD <src> … <dest>

Include la fonte che desideri copiare (<src> ) seguito 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 vuoi aggiungerlo alla directory di un'immagine, digita:

ADD /source/file/path  /destination/path

ADD può anche copiare file da un URL. Può scaricare un file esterno e copiarlo nella destinazione desiderata. Ad esempio:

ADD http://source.file/url  /destination/path

Una caratteristica aggiuntiva è che copia i file compressi, estraendo automaticamente il contenuto nella destinazione specificata. Questa funzione si applica solo a file/directory compressi archiviati localmente.

Digita la fonte e dove vuoi che il comando estragga il contenuto come segue:

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 quando li copia nel filesystem locale.

Comando di copia Docker

A causa di alcuni problemi di funzionalità, Docker ha dovuto introdurre un comando aggiuntivo per la duplicazione dei contenuti:COPY .

A differenza del suo strettamente correlato ADD comando, 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 di estrarre un file compresso, ma piuttosto di copiarlo così com'è.

L'istruzione può essere utilizzata solo per i file archiviati localmente. Pertanto, non puoi usarlo con gli URL per copiare file esterni nel tuo contenitore.

Per utilizzare il COPY istruzioni, segui il formato del comando di base:

COPY <src> … <dest> 

Ad esempio:

COPY /source/file/path  /destination/path 

Copia Docker vs AGGIUNGI

Perché era necessario aggiungere un nuovo comando simile?

Il fatto che ADD se così tante funzionalità si sono rivelate problematiche nella pratica, poiché si è comportato in modo estremamente imprevedibile. Il risultato di tali prestazioni inaffidabili spesso si riduceva alla copia quando si desidera estrarre e all'estrazione quando si desidera copiare.

Docker non è stato in grado di sostituire completamente il comando a causa dei suoi numerosi usi esistenti. Per evitare la compatibilità con le versioni precedenti, l'opzione più sicura era aggiungere il COPY comando:un comando meno diversificato ma più affidabile.

Quali utilizzare (migliori pratiche)

Considerando le circostanze in cui il COPY è stato introdotto il comando, è evidente che mantenere ADD era una questione di necessità. Docker ha rilasciato un documento ufficiale che delinea le migliori pratiche per la scrittura di Dockerfile, che sconsiglia esplicitamente di non usare ADD comando .

La documentazione ufficiale di Docker rileva che COPY dovrebbe sempre essere l'istruzione di riferimento in quanto è più trasparente di ADD .

Se devi copiare dal contesto di compilazione locale in un contenitore, continua a utilizzare COPY .

Il team Docker sconsiglia inoltre vivamente di utilizzare ADD per scaricare e copiare un pacchetto da un URL. Invece, è più sicuro ed efficiente usare wget o arricciare all'interno di un RUN comando. In questo modo eviti di creare un livello immagine aggiuntivo e di risparmiare spazio.

Supponiamo che tu voglia scaricare un pacchetto compresso da un URL, estrarre il contenuto e ripulire l'archivio.

Invece di usare ADD ed eseguendo il comando seguente:

ADD http://source.file/package.file.tar.gz /temp
RUN tar -xjf /temp/package.file.tar.gz \
  && make -C /tmp/package.file \
  && rm /tmp/ package.file.tar.gz

Dovresti usare:

RUN curl http://source.file/package.file.tar.gz \
  | tar -xjC /tmp/ package.file.tar.gz \
  && make -C /tmp/ package.file.tar.gz

Docker
  1. 7zip, Xz, Gzip, Tar, ecc:quali sono le differenze??

  2. Qual è la differenza tra COPIA e AGGIUNGI in Dockerfiles?

  3. pfSense vs Netgear router:quali sono le differenze principali?

  4. Fedora vs Ubuntu:quali sono le differenze principali?

  5. Come aggiornare/aggiungere un file nell'immagine Docker

Terraform vs Kubernetes:quali sono le differenze

IMAP vs POP3 vs SMTP:quali sono le differenze?

Quali sono le differenze tra cPanel e WHM?

Qual è la differenza tra le istruzioni COPIA e AGGIUNGI in Dockerfile?

Docker File vs Docker Compose:qual è la differenza?

useradd vs. adduser:quali sono le differenze?