GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Quelle est la différence entre les instructions COPY et ADD dans Dockerfile ?

Vous êtes nouveau sur Docker et vous apprenez à créer des images Docker personnalisées à l'aide de Dockerfile.

Vous rencontrez une variété d'instructions Dockerfile comme FROM, RUN etc.

Ensuite, vous rencontrez COPY et ADD et réalisez que les deux instructions font le même travail; copiez les fichiers et les répertoires dans votre image Docker modifiée à partir de l'hôte.

Pourquoi Dockerfile a-t-il deux commandes pour la même tâche ? Y a-t-il une différence entre les deux? En effet. Ils ont des objectifs similaires mais en termes de comportement, ils sont différents.

Laissez-moi vous expliquer cela.

Dockerfile AJOUTER contre COPIER

ADD et COPY sont tous deux conçus pour ajouter des répertoires et des fichiers à votre image Docker.

L'instruction ADD est relativement plus ancienne et peut faire plus que simplement copier des fichiers et des répertoires. ADD peut extraire des fichiers d'URL externes. Il peut également extraire des fichiers compressés en supposant qu'il prend en charge le format d'archive. Cela crée également un problème parfois si ADD ne pouvait pas prendre en charge le format d'archive.

Si ADD peut faire tout cela, pourquoi avons-nous COPY ? C'est parce que les commandes Docker ont été restructurées plusieurs fois jusqu'à présent. L'accent est mis sur la fourniture d'une structure de commande simple, directe et rationalisée.

COPY a été introduit pour remplacer directement ADD. COPY copie simplement les fichiers et les répertoires. C'est ça. Pour télécharger et extraire des fichiers, les commandes Linux habituelles telles que curl et tar sont utilisées avec les instructions RUN.

C'est la raison pour laquelle COPY est recommandé de nos jours et vous ne trouverez ADD que dans les anciens didacticiels et documentations.

ADD est une instruction plus ancienne qui peut télécharger et extraire des fichiers en plus de les copier sur les images de l'hôte. COPY ne peut copier que les fichiers et les répertoires. La copie est recommandée de nos jours.

Regardez de plus près l'instruction ADD

L'instruction ADD a les trois capacités suivantes :

1. Copie des fichiers locaux dans l'image du conteneur

Par exemple, si vous souhaitez copier des fichiers locaux sur le système hôte à partir de /home/user/application dans /opt/app sur votre image Docker, vous pouvez inclure l'instruction suivante dans votre Dockerfile :

ADD /home/user/application /opt/app

Ici, seul le contenu de /home/user/application répertoire est copié dans /opt/app y compris ses métadonnées. Il ne va pas copier l'application répertoire lui-même.

2. Extraction de fichiers tar stockés localement

Vous pouvez également utiliser l'instruction ADD pour extraire des archives compressées avec des formats - identité , gzip , bzip2 ou xz . Le contenu est décompressé sous forme de répertoire à l'intérieur de l'emplacement de destination de l'image Docker que vous créez.

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

Le comportement est similaire à ce qui se passe lorsque vous utilisez la commande tar pour extraire une archive tar vers un répertoire spécifique sur votre système hôte.

3. Télécharger un fichier à partir d'une URL

C'est similaire à la façon dont wget -P fonctionne mais pour Dockerfiles. Lors de la création de votre image Docker, vous pouvez utiliser les instructions suivantes pour télécharger un fichier et le stocker à l'emplacement souhaité sur votre image de conteneur :

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

Une fois l'image créée, vous pouvez disposer de ce document PDF avant de lancer un conteneur basé sur celui-ci. C'est l'un des nombreux cas d'utilisation uniques.

L'instruction COPY

L'instruction COPY est une évolution de l'instruction ADD qui a été conçue pour atténuer la confusion parmi les utilisateurs de Docker. Sa fonction est juste une - copier des fichiers ou des répertoires de l'emplacement source sur l'hôte vers l'emplacement de destination sur l'image Docker.

Donc, c'est essentiellement le premier point de la section d'instruction ADD qui a été discutée ci-dessus. L'instruction correspondante serait :

COPY /home/user/application /opt/app

Comme meilleure pratique, les développeurs de Docker recommandent officiellement d'utiliser l'instruction ci-dessus pour éviter toute confusion.

Donc, si vous voulez simplement copier des fichiers ou des répertoires, vous devez utiliser l'instruction COPY seule. Essayez d'éviter d'utiliser ADD dans la mesure du possible. Utilisez les instructions RUN avec les commandes Linux habituelles pour télécharger et extraire des fichiers.

J'espère que vous pouvez maintenant comprendre la différence fondamentale entre les deux instructions. Pour les comprendre individuellement, vous pouvez consulter la référence officielle et complète de ADD et COPY.

Si vous avez des suggestions, des commentaires ou des commentaires à partager sur la comparaison ci-dessus, veuillez laisser vos commentaires dans la section ci-dessous.


Docker
  1. Quelle est la différence entre strtok_r et strtok_s en C ?

  2. Quelle est la différence entre fsck et e2fsck ?

  3. Quelle est la différence entre ls et l ?

  4. Quelle est la différence entre `su -` et `su --login` ?

  5. Quelle est la différence entre unlink et rm ?

Quelle est la différence entre Rsync et BTRFS sous Linux ?

Quelle est la différence entre le chat et la commande tactile

Quelle est la différence entre la connexion et le shell sans connexion

Quelle est la différence entre la commande apt et apt-get ?

Qu'est-ce qu'un Hyperviseur ? Quelle est la différence entre les types 1 et 2 ?

Quelle est la différence entre curl et Wget ?