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

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

Besoin d'obtenir des fichiers dans ou hors d'un conteneur Docker ? Le 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 depuis 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 ID 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 nécessite un chemin de système de fichiers local et un chemin de conteneur - vous ne pouvez pas copier directement entre deux conteneurs. Utilisez une procédure en plusieurs étapes si vous en avez besoin, en copiant d'abord du conteneur source vers votre système de fichiers, puis du nouveau chemin local vers le conteneur cible.

Copier des 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 transférez-le dans /var/www/html .

Copier le comportement

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 du 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 /. à la fin composant dans le chemin.

  • /. est présent – ​​Le répertoire source est copié dans le répertoire de destination existant.
  • /. n'est pas présent - Le contenu 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.

Limites des commandes

Malgré son nom, docker cp n'est pas une implémentation complète du cp commande shell. Le cp les drapeaux ne sont pas pris en charge, à l'exception de -a et -L :

  • -a – Mode d'archivage, qui préserve les détails de l'utilisateur et du groupe sur les fichiers copiés.
  • -L – Suivez les liens symboliques dans le répertoire source pour copier le contenu des cibles de lien, 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 recourir à une approche différente.

Utiliser des montages liés 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, supprimant ainsi le besoin d'utiliser docker cp .

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

Le contenu du /example/host/directory path 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 explorateur de fichiers graphique.

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 les chemins que vous utiliserez à l'avance, 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 appartiennent généralement à root . Cela peut créer des scénarios délicats sur l'hôte où vous ne pouvez pas modifier ou supprimer des fichiers dans le 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 obtenir 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 où vous avez exécuté 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 permettent d'intégrer des fichiers dans une image statique ; cp les commandes interagissent avec les conteneurs dynamiques.

Quand copier des fichiers avec Docker ?

Copier manuellement des 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 être accompagnées de 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 docker cp manuellement avant de remplacer une instance. Lorsque vous effectuez des sauvegardes, copiez les volumes depuis votre hôte, au lieu d'extraire les fichiers des conteneurs.

docker cp est particulièrement utile lors du débogage de conteneurs ou du travail dans un environnement de développement. Parfois, vous devez injecter manuellement un fichier de configuration temporaire ou extraire un journal enterré. Utilisation de docker cp est plus rapide et plus pratique que de reconstruire l'intégralité de l'image à 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 .

Résumé

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 manque de la plupart des fonctionnalités avancées du cp basé sur le shell commande.

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 les conteneurs. La persistance à long terme des fichiers doit être implémentée avec des volumes car ce sont des composants de première classe dans l'écosystème Docker.


Docker
  1. Comment utiliser les images Docker, les conteneurs et les Dockerfiles en profondeur

  2. Comment et pourquoi utiliser un hôte Docker distant

  3. Comment copier des fichiers entre les pods Kubernetes et votre machine

  4. Comment partager des données entre des conteneurs Docker

  5. Comment répertorier les conteneurs Docker

Comment obtenir l'adresse IP d'un conteneur Docker à partir de l'hôte

Comment utiliser Docker Enregistrer l'image et l'exporter pour le partage

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

Comment copier des fichiers entre l'hôte et le conteneur Docker

Comment exécuter des conteneurs Docker

Comment nommer ou renommer les conteneurs Docker