Comment utiliser Docker Cp pour copier des fichiers entre l'hôte et les conteneurs - CloudSavvy IT
Agence web » Actualités du digital » Comment utiliser Docker Cp pour copier des fichiers entre l’hôte et les conteneurs –

Comment utiliser Docker Cp pour copier des fichiers entre l’hôte et les conteneurs –

Besoin d’entrer ou de sortir des fichiers d’un conteneur Docker ? Les docker cp La commande vous permet de copier entre les systèmes de fichiers hôte et conteneur afin que vous puissiez ajouter des détails de configuration, créer des sauvegardes et restaurer des données existantes.

Syntaxe de base

docker cp accepte les chemins source et destination comme ses deux arguments :

docker cp example.txt my-container:/example.txt

Ici example.txt est en cours de copie de votre répertoire de travail vers /example.txt dans le my-container récipient. Vous pouvez inverser les deux arguments pour copier /example.txt hors du conteneur et dans votre répertoire de travail.

L’argument faisant référence au chemin du conteneur doit être précédé d’un identifiant ou d’un nom de conteneur suivi de deux-points (:). Vous pouvez trouver l’ID ou le nom d’un conteneur en cours d’exécution avec docker ps.

Chaque docker cp La commande a besoin d’un chemin de système de fichiers local et d’un chemin de conteneur – vous ne pouvez pas copier directement entre deux conteneurs. Utilisez une procédure en plusieurs étapes si vous devez le faire, en copiant d’abord du conteneur source vers votre système de fichiers, puis du nouveau chemin local dans le conteneur cible.

Copie de répertoires entiers

docker cp peut également copier récursivement des répertoires :

docker cp /home/demo/website apache-container:/var/www/html/.

Docker copiera tout dans /home/demo/website et le transférer dans /var/www/html.

Comportement de copie

Lorsque vous copiez un fichier, Docker crée un nouveau fichier à la destination s’il n’existe pas déjà. Les fichiers existants sont écrasés par le nouveau contenu. Lorsque la destination est un répertoire, le fichier y est copié en utilisant le nom de fichier source. Une exception est lorsque la destination spécifiée se termine par un /, désignant un répertoire, mais le chemin n’existe pas déjà. Dans ce scénario, une erreur sera générée.

Le processus est un peu plus compliqué pour les copies de répertoire. Un nouveau répertoire sera créé à la destination avec le contenu du répertoire source, si le chemin de destination n’existe pas déjà. Lorsqu’il existe, le comportement diffère selon que vous avez inclus ou non un /. composant dans le chemin.

  • /. est présent – ​​La source annuaire est copié dans le répertoire de destination existant.
  • /. n’est pas présent – ​​Le teneur du répertoire source est copié dans la destination.

La distinction subtile dicte si un nouveau sous-répertoire est créé à l’intérieur de la destination.

Limitations des commandes

Malgré son nom, docker cp n’est pas une mise en œuvre complète de la cp commande shell. Les cp les indicateurs ne sont pas pris en charge, sauf pour -a et -L:

  • -a – Mode d’archivage, qui préserve les détails des utilisateurs et des groupes sur les fichiers copiés.
  • -L – Suivez les liens symboliques dans le répertoire source pour copier le contenu des cibles de liens, plutôt que les liens eux-mêmes.

Pour les cas d’utilisation plus avancés où la copie sélective est requise, vous devrez utiliser une approche différente.

Utiliser des montages de liaison pour copier des fichiers

Les volumes Docker offrent un autre moyen de déplacer des fichiers entre les conteneurs et votre hôte. Le montage par liaison d’un répertoire local dans un conteneur vous permet d’accéder à son contenu à partir de votre système de fichiers hôte, éliminant ainsi le besoin d’utiliser docker cp.

docker run -v /example/host/directory:/container/path my-image:latest

Le contenu du /example/host/directory chemin sont montés dans le système de fichiers du conteneur à /container/path. Vous pouvez interagir avec ces fichiers en dehors de Docker à l’aide d’outils familiers tels que cp, rsync, et votre navigateur de fichiers graphiques.

Cette technique n’est utile que lorsque vous travaillez avec un seul répertoire de conteneur. Cela ne fonctionne pas bien lorsque vous copiez à partir d’emplacements arbitraires, car vous devez connaître à l’avance les chemins que vous utiliserez lors de la création du conteneur.

Vous devez également vous méfier des autorisations du système de fichiers : les fichiers créés dans le conteneur appartiendront généralement à root. Cela peut créer des scénarios difficiles sur l’hôte où vous ne pouvez pas modifier ou supprimer des fichiers à l’intérieur du répertoire lié. Utilisez le chown commande sur l’hôte et à l’intérieur du conteneur pour changer la propriété en fonction de l’environnement si nécessaire.

Qu’en est-il de COPY dans Dockerfiles ?

docker cp peut parfois être confondu avec le COPY instructions dans Dockerfiles. Il est important de reconnaître que ces deux fonctionnalités servent des cas d’utilisation très différents.

COPY ne peut pas être utilisé pour déplacer des fichiers entre votre hôte et un conteneur en cours d’exécution. C’est pour mettre des fichiers dans images pendant le processus de construction :

COPY /home/me/my-website /var/www/html/.

Ici, le code source du site Web est copié dans une image dans le cadre d’une construction. Il s’agit d’un processus unique. Chaque conteneur démarré à partir de l’image inclurait la source du site Web telle qu’elle était au moment de l’exécution docker build.

docker cp vous permet de remplacer ce code source par une version plus récente une fois qu’un conteneur est en cours d’exécution. COPY les instructions servent à faire des fichiers une partie d’une image statique ; cp les commandes interagissent avec les conteneurs en direct.

Quand copier des fichiers avec Docker ?

La copie manuelle de fichiers de votre hôte vers un conteneur Docker, ou vice versa, devrait être un événement relativement rare. Les images sont censées être autosuffisantes, elles doivent donc contenir tout ce dont vous avez besoin pour démarrer une instance. La configuration est généralement gérée via des variables d’environnement.

Les conteneurs qui doivent stocker des données de manière persistante doivent utiliser des volumes Docker. Les volumes permettent aux données de survivre à n’importe quel conteneur, vous n’avez donc pas besoin de les docker cp avant de remplacer une instance. Lorsque vous effectuez des sauvegardes, copiez les volumes depuis votre hôte, au lieu de retirer les fichiers des conteneurs.

docker cp est particulièrement utile lors du débogage de conteneurs ou lors du travail dans un environnement de développement. Parfois, vous devez injecter manuellement un fichier de configuration temporaire ou extraire un journal enterré. À l’aide de docker cp est plus rapide et plus pratique que de reconstruire l’image entière à chaque fois que vous modifiez le code.

Rappelez-vous toujours que les fichiers copiés dans les conteneurs ne persisteront que tant que le conteneur vit. Démarrer un autre conteneur à partir de la même image vous donnera une table rase, sans les fichiers que vous avez ajoutés avec docker cp.

Sommaire

docker cp vous permet de déplacer des fichiers entre votre hôte et vos conteneurs Docker. Il fonctionne avec des fichiers et des répertoires mais il lui manque la plupart des fonctionnalités avancées du shell cp commander.

Utilisation régulière de docker cp indique un écart potentiel par rapport aux meilleures pratiques en matière de conteneurs. Il est sage de le traiter comme un outil pratique pour le développement, plutôt que comme une partie intégrante du travail avec des conteneurs. La persistance des fichiers à long terme doit être implémentée avec des volumes car ce sont des composants de première classe dans l’écosystème Docker.

★★★★★