Lors de la création d'un Dockerfile, il existe deux commandes que vous pouvez utiliser pour y copier des fichiers / répertoires - ADD
et COPY
. Bien qu'il existe de légères différences dans l'étendue de leur fonction, ils remplissent essentiellement la même tâche.
Alors, pourquoi avons-nous deux commandes et comment savoir quand utiliser l'une ou l'autre?
DOCKER ADD
COMMAND
Commençons par noter que la ADD
commande est plus ancienne que COPY
. Depuis le lancement de la plateforme Docker, l' ADD
instruction fait partie de sa liste de commandes.
La commande copie les fichiers / répertoires dans un système de fichiers du conteneur spécifié.
La syntaxe de base de la ADD
commande est:
ADD <src> … <dest>
Il comprend la source que vous souhaitez copier ( <src>
) suivie de la destination où vous souhaitez le stocker ( <dest>
). Si la source est un répertoire,ADD
copie tout ce qu'il contient (y compris les métadonnées du système de fichiers).
Par exemple, si le fichier est disponible localement et que vous souhaitez l'ajouter au répertoire d'une image, vous tapez:
ADD /source/file/path /destination/path
ADD
peut également copier des fichiers à partir d'une URL. Il peut télécharger un fichier externe et le copier vers la destination souhaitée. Par exemple:
ADD http://source.file/url /destination/path
Une fonctionnalité supplémentaire est qu'il copie les fichiers compressés, extrayant automatiquement le contenu dans la destination donnée. Cette fonctionnalité s'applique uniquement aux fichiers / répertoires compressés stockés localement.
ADD source.file.tar.gz /temp
Gardez à l'esprit que vous ne pouvez pas télécharger et extraire un fichier / répertoire compressé à partir d'une URL. La commande ne décompresse pas les packages externes lors de leur copie dans le système de fichiers local.
DOCKER COPY
COMMAND
En raison de certains problèmes de fonctionnalité, Docker a dû introduire une commande supplémentaire pour la duplication de contenu - COPY
.
Contrairement à sa ADD
commande étroitement liée , COPY
une seule fonction est affectée. Son rôle est de dupliquer des fichiers / répertoires dans un emplacement spécifié dans leur format existant. Cela signifie qu'il ne traite pas de l'extraction d'un fichier compressé, mais le copie tel quel.
L'instruction ne peut être utilisée que pour les fichiers stockés localement. Par conséquent, vous ne pouvez pas l'utiliser avec des URL pour copier des fichiers externes dans votre conteneur.
Pour utiliser l' COPY
instruction, suivez le format de commande de base:
Tapez la source et l'endroit où vous souhaitez que la commande extrait le contenu comme suit:
COPY <src> … <dest>
Par exemple:
COPY /source/file/path /destination/path
Quelle commande utiliser? (Meilleure pratique)
Compte tenu des circonstances dans lesquelles le COPY
commandement a été introduit, il est évident que le maintien ADD
était une nécessité. Docker a publié un document officiel décrivant les meilleures pratiques pour l'écriture de Dockerfiles, qui déconseille explicitement d'utiliser leADD
commande.
La documentation officielle de Docker note que cela COPY
devrait toujours être l'instruction principale car elle est plus transparente que ADD
.
Si vous devez copier du contexte de construction local dans un conteneur, respectez l'utilisation COPY
.
L'équipe Docker déconseille également fortement ADD
de télécharger et de copier un package à partir d'une URL. Au lieu de cela, il est plus sûr et plus efficace d'utiliser wget ou curl dans une RUN
commande. Ce faisant, vous évitez de créer une couche d'image supplémentaire et économisez de l'espace.