Quelle est la différence entre COPIER et AJOUTER dans Dockerfiles ?  – CloudSavvy IT
Agence web » Actualités du digital » Quelle est la différence entre COPIER et AJOUTER dans Dockerfiles ? –

Quelle est la différence entre COPIER et AJOUTER dans Dockerfiles ? –

ADD et COPY sont deux semblables Dockerfile instructions qui vous permettent d’ajouter du contenu à vos images au moment de la construction. Tandis que COPY est une source directe vers la copie de destination, ADD inclut des fonctionnalités supplémentaires pour travailler avec des archives et des URL distantes.

Sommaire

COPIE

COPY est la plus simple des deux instructions. Il accepte deux arguments, une source et une destination :

COPY example.txt /example/dir/example.txt

Le chemin source sera copié de votre hôte Docker dans le système de fichiers du conteneur. L’image construite inclura le fichier ou le répertoire copié au chemin de destination spécifié.

COPY fonctionne avec tous les fichiers et répertoires, mais les chemins source sont limités à ceux de votre contexte de construction actif. Le contexte est défini lorsque vous exécutez docker build:

docker build .

# OR

docker build /path/to/context

L’instruction crée automatiquement le répertoire de destination dans le conteneur lorsqu’il n’existe pas déjà. Si vous incluez une barre oblique de fin (/), Docker traite la destination comme un répertoire et y placera le fichier source.

Vous pouvez utiliser des caractères génériques tels que *.jpg dans la destination du chemin source pour correspondre à un ensemble de fichiers. Ces expressions seront analysées à l’aide du Go filepath correspondant.

Les fichiers copiés ont un UID et un GID de 0 par défaut. Cela peut être personnalisé avec l’option --chown flag qui accepte les UID, les GID et les noms. ça marche chown sur les fichiers copiés une fois qu’ils sont dans le conteneur :

COPY --chown=my-user:my-group example.txt /example.txt

COPY prend également en charge un --from drapeau. Cela modifie le chemin source auquel se référer un autre image de conteneur, au lieu de votre contexte de construction local. Il fonctionne également avec les builds à plusieurs étapes pour extraire les artefacts créés par les étapes de build précédentes.

# Copies /usr/bin/composer from the composer:latest image
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Multi-stage build example
# Stage 1: Copies example.scss from working directory into node:latest image
# Stage 2: Copies example.css built in stage 1 into the final image (based on httpd:latest)
FROM node:latest AS sass
COPY example.scss .
RUN npm install -g node-sass && node-sass example.scss example.css
FROM httpd:latest
COPY --from=sass /example.css example.css

Les --from flag doit faire référence à une étape nommée qui est répertoriée plus tôt dans le Dockerfile. Lorsqu’il n’y a pas d’étape correspondante, Docker suppose que vous faites plutôt référence à une image. Vous rencontrerez une erreur de génération si l’image ne peut pas être extraite.

AJOUTER

ADD a la même syntaxe que COPY, acceptant les chemins source et de destination. Il n’y a pas de support pour --from mais tu peux utiliser --chown.

contrairement à COPY, ADD est capable de télécharger des URL de fichiers distants. La spécification d’une URL accessible au public comme chemin source téléchargera ce fichier et l’ajoutera à l’image du conteneur. L’heure de modification du chemin de destination (mtime) sera mis à la valeur de Last-Modified en-tête dans la réponse HTTP du téléchargement.

ADD peut également extraire des archives tar, y compris des archives compressées avec gzip, bzip2 et xz. La spécification d’une archive compatible comme chemin source décompresse son contenu dans le répertoire de conteneur spécifié. Le contenu existant du répertoire sera conservé.

La détection d’archive est basée sur le contenu réel du fichier, et non sur le nom ou l’extension du fichier. Vous pouvez utiliser n’importe quel fichier d’archive authentique sans le nommer .tar, .tar.gz ou .tar.xz.

La possibilité d’extraire automatiquement les archives simplifie l’ajout de packages logiciels distribués sous forme de fichiers tar à vos images de conteneur. Fournir un chemin tar à COPY copierait le fichier d’archive compressé tel quel, pas son contenu. Vous auriez besoin d’utiliser un RUN instruction de décompresser manuellement le fichier.

Les comportements autour COPY postuler à ADD à. À l’exception des URL distantes, les chemins source doivent exister dans votre contexte de génération. Le chemin de destination du conteneur sera automatiquement créé lorsqu’il n’existe pas à l’aide des règles de Docker pour la résolution de chemin.

Sommaire

COPY et ADD sont deux instructions étroitement liées mais distinctement différentes que vous pouvez utiliser lors de l’écriture d’un Dockerfile. Comme leurs ensembles de fonctionnalités se chevauchent, vous vous demandez peut-être quel est le « meilleur » à utiliser par défaut.

Selon le guide des meilleures pratiques de Docker, vous devriez atteindre COPY sauf si vous avez besoin des capacités supplémentaires de ADD. ADD est une opération opaque qui ajoute de la magie au processus de copie.

Utiliser uniquement ADD quand c’est vraiment nécessaire, cela aide à communiquer vos intentions. Sinon, vous risquez d’habituer les membres de l’équipe à utiliser ADD ce qui pourrait avoir des conséquences désastreuses. Un involontaire ADD my-archive.tar . à la place de COPY my-archive.tar pourrait causer de la confusion et des versions cassées lorsque le contenu de l’archive apparaît dans votre conteneur, au lieu de l’archive elle-même.

Vous devez également examiner attentivement s’il est approprié d’utiliser ADD avec des URL distantes. Il peut être plus efficace d’utiliser curl ou wget avec un RUN instruction car cela facilite la mise en cache de la couche d’image. Un ADD L’instruction invalidera toujours le cache pour toutes les étapes de construction suivantes lorsque le fichier à une URL distante change.

Dans la mesure du possible, il est recommandé de supprimer les fichiers copiés après leur utilisation. Si vous téléchargez ou extrayez un programme d’installation de logiciel, la suppression du fichier binaire à usage unique après l’avoir exécuté vous aidera à affiner votre image finale.

★★★★★