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.