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

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

Non conosci Docker e stai imparando a creare immagini Docker personalizzate utilizzando Dockerfile.

Ti imbatti in una varietà di istruzioni Dockerfile come FROM, RUN ecc.

Quindi ti imbatti in COPY e ADD e ti rendi conto che entrambe le istruzioni fanno lo stesso lavoro; copia i file e le directory nell'immagine Docker modificata dall'host.

Perché Dockerfile ha due comandi per la stessa attività? C'è differenza tra i due? Infatti. Hanno obiettivi simili ma in termini di comportamento sono diversi.

Lascia che te lo spieghi.

Dockerfile ADD vs COPY

Sia ADD che COPY sono progettati per aggiungere directory e file all'immagine Docker.

L'istruzione ADD è relativamente più vecchia ed è in grado di fare molto di più della semplice copia di file e directory. ADD può estrarre file da URL esterni. Può anche estrarre file compressi supponendo che supporti il ​​formato di archivio. Questo crea anche un problema a volte se ADD non è in grado di supportare il formato di archivio.

Se ADD può fare tutto questo, perché abbiamo COPY? È perché i comandi Docker sono stati ristrutturati più volte finora. L'obiettivo è fornire una struttura di comando semplice, diretta e più snella.

COPY è stato introdotto come semplice sostituto di ADD. COPY copia solo file e directory. Questo è tutto. Per scaricare ed estrarre file, vengono utilizzati i normali comandi Linux come curl e tar con le istruzioni RUN.

Questo è il motivo per cui COPY è consigliato in questi giorni e troverai AGGIUNGI solo nei tutorial e nelle documentazioni precedenti.

ADD è un'istruzione precedente che può scaricare ed estrarre file oltre a copiarli nelle immagini dall'host. COPY può solo copiare i file e le directory. La copia è consigliata in questi giorni.

Scopri più da vicino l'istruzione ADD

L'istruzione ADD ha le tre capacità seguenti:

1. Copia di file locali nell'immagine del contenitore

Ad esempio, se desideri copiare file locali sul sistema host da /home/user/application in /opt/app sull'immagine Docker, puoi includere le seguenti istruzioni all'interno del tuo Dockerfile:

ADD /home/user/application /opt/app

Qui, solo i contenuti del /home/user/application la directory viene copiata in /opt/app compresi i suoi metadati. Non copierà l'application directory stessa.

2. Estrazione di file tar archiviati localmente

Puoi anche utilizzare l'istruzione ADD per estrarre archivi compressi con formati - identità , gzip , bzip2 o xz . Il contenuto viene decompresso come una directory all'interno del percorso di destinazione dell'immagine Docker che crei.

ADD /home/user/test.tar.gz /opt

Il comportamento è simile a quello che accade quando usi il comando tar per estrarre un tarball in una directory specifica sul tuo sistema host.

3. Scarica un file da un URL

È simile a come wget -P funziona ma per Dockerfiles. Durante la creazione dell'immagine Docker, puoi utilizzare le seguenti istruzioni per scaricare un file e archiviarlo nella posizione desiderata sull'immagine del contenitore:

ADD https://filesamples.com/samples/document/pdf/sample2.pdf /home/user

Dopo aver creato l'immagine, puoi avere questo documento PDF prima di avviare un contenitore basato su di esso. Questo è uno dei tanti casi d'uso unici.

L'istruzione COPY

L'istruzione COPY è un'evoluzione dell'istruzione ADD progettata per mitigare la confusione tra gli utenti Docker. La sua funzione è solo una:copiare file o directory dalla posizione di origine sull'host alla posizione di destinazione sull'immagine Docker.

Quindi, è fondamentalmente il primo punto nella sezione delle istruzioni ADD che è stato discusso sopra. L'istruzione corrispondente sarebbe:

COPY /home/user/application /opt/app

Come best practice, gli sviluppatori di Docker raccomandano ufficialmente di utilizzare le istruzioni di cui sopra per evitare confusione.

Quindi, se vuoi solo copiare file o directory, dovresti usare l'istruzione COPY da sola. Cerca di evitare di utilizzare ADD ove possibile. Usa le istruzioni RUN con i normali comandi Linux per scaricare ed estrarre file.

Spero che ora tu possa capire la differenza fondamentale tra le due istruzioni. Per capirli singolarmente, puoi dare un'occhiata al riferimento ufficiale e completo di ADD e COPY.

Se hai suggerimenti, feedback o commenti da condividere sul confronto di cui sopra, lascia i tuoi pensieri nella sezione seguente.


Docker
  1. Qual è la differenza tra InnoDB e MyISAM?

  2. La differenza tra [[ $a ==Z* ]] e [ $a ==Z* ]?

  3. Qual ​​è la differenza tra cPanel e WHM?

  4. Qual è la differenza tra adduser e useradd?

  5. Qual è la differenza tra unlink e rm?

Qual è la differenza tra Rsync e BTRFS in Linux?

Qual è la differenza tra Cat e Touch Command

Qual è la differenza tra Login e Non-Login Shell

Qual è la differenza tra il comando apt e apt-get?

Che cos'è un hypervisor? Qual è la differenza tra il tipo 1 e 2?

Qual è la differenza tra curl e Wget?