Comment utiliser la commande docker container cp pour copier des fichiers

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce lab, vous apprendrez à utiliser efficacement la commande docker container cp pour copier des fichiers entre votre système de fichiers local et des conteneurs Docker. Cette expérience pratique couvrira des scénarios essentiels, notamment la copie de fichiers depuis votre machine locale vers un conteneur en cours d'exécution, la récupération de fichiers d'un conteneur vers votre système local, et l'utilisation des capacités de streaming pour transférer des données via STDOUT et STDIN.

À travers des exemples pratiques, vous acquerrez une maîtrise de la gestion des flux de données pour vos applications conteneurisées. Vous apprendrez à copier des fichiers individuels, des répertoires, et même à diffuser des données en streaming, vous offrant ainsi la flexibilité nécessaire pour diverses tâches de développement et de déploiement.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/VolumeOperationsGroup -.-> docker/cp("Copy Data Between Host and Container") subgraph Lab Skills docker/run -.-> lab-555105{{"Comment utiliser la commande docker container cp pour copier des fichiers"}} docker/ps -.-> lab-555105{{"Comment utiliser la commande docker container cp pour copier des fichiers"}} docker/start -.-> lab-555105{{"Comment utiliser la commande docker container cp pour copier des fichiers"}} docker/stop -.-> lab-555105{{"Comment utiliser la commande docker container cp pour copier des fichiers"}} docker/rm -.-> lab-555105{{"Comment utiliser la commande docker container cp pour copier des fichiers"}} docker/exec -.-> lab-555105{{"Comment utiliser la commande docker container cp pour copier des fichiers"}} docker/pull -.-> lab-555105{{"Comment utiliser la commande docker container cp pour copier des fichiers"}} docker/cp -.-> lab-555105{{"Comment utiliser la commande docker container cp pour copier des fichiers"}} end

Copier un fichier local dans un conteneur

Dans cette étape, vous apprendrez à copier un fichier de votre système de fichiers local vers un conteneur Docker en cours d'exécution. Il s'agit d'une tâche courante lorsque vous devez ajouter des fichiers de configuration, des scripts ou d'autres données à un conteneur après son démarrage.

Commencez par créer un simple fichier texte sur votre machine locale dans le répertoire ~/project.

echo "This is a test file." > ~/project/test_file.txt

Cette commande crée un fichier nommé test_file.txt dans votre répertoire ~/project et y écrit le texte "This is a test file.".

Ensuite, nous avons besoin d'un conteneur en cours d'exécution pour y copier le fichier. Nous utiliserons une image ubuntu simple à cet effet. Comme l'image pourrait ne pas être présente localement, nous allons d'abord la télécharger.

docker pull ubuntu:latest

Cette commande télécharge la dernière version de l'image ubuntu depuis Docker Hub.

Maintenant, lançons un conteneur basé sur l'image ubuntu. Nous l'exécuterons en mode détaché (-d) et lui donnerons un nom (my_ubuntu_container) pour une identification facile.

docker run -d --name my_ubuntu_container ubuntu:latest sleep infinity

Cette commande démarre un nouveau conteneur nommé my_ubuntu_container utilisant l'image ubuntu:latest. La commande sleep infinity maintient le conteneur en fonctionnement indéfiniment, ce qui est utile pour la démonstration.

Vous pouvez vérifier que le conteneur est en cours d'exécution avec la commande docker ps.

docker ps

Vous devriez voir my_ubuntu_container listé dans la sortie.

Maintenant, nous pouvons copier le fichier test_file.txt de votre machine locale vers le conteneur en cours d'exécution en utilisant la commande docker cp. La syntaxe est docker cp <chemin_local> <nom_conteneur>:<chemin_conteneur>.

docker cp ~/project/test_file.txt my_ubuntu_container:/tmp/

Cette commande copie le fichier ~/project/test_file.txt dans le répertoire /tmp/ à l'intérieur du conteneur my_ubuntu_container.

Pour vérifier que le fichier a bien été copié, vous pouvez exécuter une commande à l'intérieur du conteneur avec docker exec. Nous utiliserons ls pour lister les fichiers dans le répertoire /tmp/ du conteneur.

docker exec my_ubuntu_container ls /tmp/

Vous devriez voir test_file.txt listé dans la sortie, confirmant que le fichier a été copié avec succès.

Enfin, nettoyons le conteneur que nous avons créé.

docker stop my_ubuntu_container
docker rm my_ubuntu_container

Ces commandes arrêtent et suppriment le conteneur, respectivement.

Copier des fichiers d'un conteneur vers le système de fichiers local

Dans cette étape, vous apprendrez à copier des fichiers d'un conteneur Docker en cours d'exécution vers votre système de fichiers local. Cette opération est utile pour récupérer des journaux, fichiers de configuration ou toute autre donnée générée ou modifiée dans un conteneur.

Tout d'abord, assurons-nous d'avoir un conteneur en cours d'exécution. Nous utiliserons my_ubuntu_container de l'étape précédente. S'il n'est pas démarré, lancez-le.

docker start my_ubuntu_container

Cette commande démarre le conteneur nommé my_ubuntu_container.

Maintenant, créons un fichier à l'intérieur du conteneur que nous copierons vers notre machine locale. Nous utiliserons docker exec pour exécuter une commande dans le conteneur afin de créer un fichier nommé container_file.txt dans le répertoire /root/.

docker exec my_ubuntu_container sh -c 'echo "This file is from the container." > /root/container_file.txt'

Cette commande exécute une commande shell dans my_ubuntu_container pour créer le fichier /root/container_file.txt avec le contenu spécifié.

Pour vérifier que le fichier a bien été créé dans le conteneur, vous pouvez utiliser docker exec pour lister les fichiers du répertoire /root/ du conteneur.

docker exec my_ubuntu_container ls /root/

Vous devriez voir container_file.txt dans la sortie.

Maintenant, copions container_file.txt du conteneur vers votre machine locale en utilisant la commande docker cp. La syntaxe pour copier d'un conteneur vers le local est docker cp <nom_conteneur>:<chemin_conteneur> <chemin_local>. Nous le copierons dans votre répertoire ~/project.

docker cp my_ubuntu_container:/root/container_file.txt ~/project/

Cette commande copie le fichier /root/container_file.txt de my_ubuntu_container vers votre répertoire local ~/project/.

Pour vérifier que le fichier a bien été copié sur votre machine locale, listez les fichiers de votre répertoire ~/project.

ls ~/project/

Vous devriez voir container_file.txt dans la sortie, ainsi que test_file.txt de l'étape précédente.

Vous pouvez également afficher le contenu du fichier copié avec la commande cat.

cat ~/project/container_file.txt

La sortie devrait être "This file is from the container.", confirmant que le contenu a été correctement copié.

Enfin, nettoyons le conteneur.

docker stop my_ubuntu_container
docker rm my_ubuntu_container

Diffuser le contenu d'un fichier depuis un conteneur vers STDOUT

Dans cette étape, vous apprendrez comment diffuser le contenu d'un fichier depuis un conteneur Docker en cours d'exécution directement vers la sortie standard (STDOUT) de votre machine locale. Cette méthode est utile pour visualiser rapidement le contenu d'un fichier dans un conteneur sans avoir besoin de le copier explicitement.

Commencez par vérifier que my_ubuntu_container est en cours d'exécution. Si ce n'est pas le cas, démarrez-le.

docker start my_ubuntu_container

Maintenant, créons un autre fichier à l'intérieur du conteneur dont nous diffuserons le contenu vers STDOUT. Nous allons créer un fichier nommé stream_test.log dans le répertoire /var/log/ du conteneur.

docker exec my_ubuntu_container sh -c 'echo "This is a log entry." > /var/log/stream_test.log'

Cette commande exécute une commande shell dans my_ubuntu_container pour créer le fichier /var/log/stream_test.log avec le contenu spécifié.

Pour diffuser le contenu de ce fichier vers votre STDOUT local, vous pouvez utiliser la commande docker exec avec la commande cat à l'intérieur du conteneur.

docker exec my_ubuntu_container cat /var/log/stream_test.log

Cette commande exécute cat /var/log/stream_test.log dans le conteneur my_ubuntu_container. Le résultat de cette commande dans le conteneur est ensuite diffusé vers la sortie standard de votre terminal local.

Vous devriez voir le contenu "This is a log entry." affiché directement dans votre terminal. Cela démontre comment vous pouvez visualiser rapidement le contenu d'un fichier à l'intérieur d'un conteneur sans avoir besoin de copier l'intégralité du fichier.

Pour terminer, nettoyons le conteneur.

docker stop my_ubuntu_container
docker rm my_ubuntu_container

Transmettre une archive tar locale vers un conteneur via STDIN

Dans cette étape, vous apprendrez comment transmettre une archive tar locale directement dans un conteneur Docker en cours d'exécution en utilisant l'entrée standard (STDIN). Cette méthode efficace permet de transférer plusieurs fichiers ou répertoires dans un conteneur sans créer de fichiers intermédiaires sur votre machine locale.

Commencez par créer un répertoire et quelques fichiers dans le répertoire ~/project de votre machine locale que nous archiverons et transmettrons.

mkdir ~/project/my_files
echo "File 1 content." > ~/project/my_files/file1.txt
echo "File 2 content." > ~/project/my_files/file2.txt

Cette commande crée un répertoire my_files et deux fichiers texte à l'intérieur.

Assurez-vous que my_ubuntu_container est en cours d'exécution. Si ce n'est pas le cas, démarrez-le.

docker start my_ubuntu_container

Pour transmettre une archive tar vers le conteneur, nous utiliserons la commande tar pour créer une archive du répertoire my_files et redirigerons (via |) sa sortie vers la commande docker exec. À l'intérieur du conteneur, nous utiliserons à nouveau la commande tar pour extraire l'archive.

Nous transmettrons l'archive vers le répertoire /opt/ du conteneur.

tar -cvf - ~/project/my_files | docker exec -i my_ubuntu_container tar -xvf - -C /opt/

Décomposons cette commande :

  • tar -cvf - ~/project/my_files : crée une archive tar (-c) en mode verbeux (-v) du répertoire ~/project/my_files. L'option -f - indique à tar d'écrire l'archive sur la sortie standard.
  • | : redirige la sortie standard de la commande tar (l'archive tar) vers l'entrée standard de la commande suivante.
  • docker exec -i my_ubuntu_container tar -xvf - -C /opt/ : exécute la commande tar dans my_ubuntu_container. Le flag -i est essentiel car il maintient STDIN ouvert pour la commande exec, lui permettant de recevoir les données redirigées. La commande tar -xvf - extrait (-x) en mode verbeux (-v) depuis l'entrée standard (-f -). L'option -C /opt/ change le répertoire courant vers /opt/ avant extraction, donc le contenu de l'archive sera extrait dans /opt/my_files du conteneur.

Pour vérifier que les fichiers ont bien été transmis et extraits dans le conteneur, listez le contenu du répertoire /opt/my_files/ à l'aide de docker exec.

docker exec my_ubuntu_container ls /opt/my_files/

Vous devriez voir file1.txt et file2.txt dans la sortie, confirmant que l'archive tar a bien été transmise et extraite.

Pour terminer, nettoyons le conteneur et les fichiers locaux.

docker stop my_ubuntu_container
docker rm my_ubuntu_container
rm -rf ~/project/my_files

Résumé

Dans ce lab, vous avez appris à utiliser la commande docker container cp pour copier des fichiers entre votre système de fichiers local et un conteneur Docker en cours d'exécution. Vous avez pratiqué la copie d'un fichier local dans un conteneur, démontrant comment ajouter des données ou configurations nécessaires après le démarrage d'un conteneur. Cela a impliqué la création d'un fichier local, le téléchargement et l'exécution d'un simple conteneur Ubuntu, puis l'utilisation de docker cp pour transférer le fichier dans le répertoire /tmp du conteneur.