Comment copier des fichiers avec Docker cp vers votre conteneur Docker

Si vous avez besoin de copier des fichiers de l’hôte Docker vers votre conteneur Docker, ce tutoriel est fait pour vous.

Dans ce tutoriel, vous apprendrez à copier des fichiers de l’hôte Docker vers un conteneur Docker en utilisant différentes approches.

Allons-y !

Prérequis

Si vous souhaitez suivre pas à pas, assurez-vous d’avoir ce qui suit :

  • Docker installé sur l’hôte Linux. Ce tutoriel utilise Docker v19.03.11. Vous pouvez confirmer votre version de Docker en exécutant docker version.

Copier des fichiers avec la commande docker cp

Pour commencer ce tutoriel, vous apprendrez à copier des fichiers de l’hôte Docker vers les conteneurs en utilisant la commande docker cp. La commande docker cp copie des fichiers ou des dossiers entre un conteneur et le système de fichiers local de votre hôte Docker et vice versa.

Apprenons comment utiliser la commande Docker cp avec un exemple.

1. Ouvrez un terminal sur votre machine locale.

2. Créez un fichier nommé myfile.txt en utilisant la commande touch. Le fichier myfile.txt sera copié depuis l’hôte Docker vers le conteneur.

touch myfile.txt

3. Exécutez la commande docker run. La commande docker run ci-dessous créera un nouveau conteneur en arrière-plan. La commande ci-dessous contient trois paramètres décrits comme suit:

  • d flag that runs the container in the background and keeps it alive until deleted.
  • p flag publishes a container’s port 80 to the host on port 80.
  • nginx sera l’image utilisée pour exécuter le conteneur.
sudo docker run -d -p 80:80 nginx
Executing the Docker run command

4. Vérifiez si le conteneur Docker est créé avec succès en utilisant la commande docker ps. Après avoir exécuté la commande docker ps, vous devriez voir une nouvelle valeur générée sous l’attribut CONTAINER ID (Dans le cas ci-dessous ccae4670f030) en utilisant l’image NGINX qui confirme que le conteneur est créé avec succès.

sudo docker ps
Verifying the docker container by running the docker ps command

Avant d’exécuter la commande Docker cp, la syntaxe de la commande Docker cp est la suivante:

  • CONTAINER: SRC_PATH spécifie le chemin source du conteneur.
  • DEST_PATH est le chemin de destination sur l’hôte.
  • CONTAINER: DEST_PATH est le chemin de destination sur le conteneur.

De plus, vous pouvez également ajouter les options avec les paramètres ci-dessous dans la commande comme suit:

  • En utilisant archive ou a – Copie toutes les permissions des utilisateurs et du groupe principal des fichiers et dossiers.
  • En utilisant L – Spécifier l’option L permettra de copier tout lien symbolique dans le Chemin Source vers le chemin de destination.
# Syntaxe pour Copier du Conteneur vers l'Hôte Docker  
docker cp {options} CONTAINER:SRC_PATH DEST_PATH 
# Syntaxe pour Copier de l'Hôte Docker vers le Conteneur  
docker cp {options} SRC_PATH CONTAINER:DEST_PATH 

5. Ensuite, exécutez la commande docker cp. La commande docker cp copiera le myfile.txt que vous avez créé précédemment dans le répertoire /usr/share des conteneurs. ccae4670f030 est l’ID du conteneur vers lequel le myfile.txt sera copié.

sudo docker cp myfile.txt ccae4670f030:/usr/share

6. Enfin, connectez-vous au conteneur en cours d’exécution en exécutant la commande docker exec avec /bin/bash, qui est utilisé comme shell par défaut pour la connexion utilisateur du système Linux.

  • L’indicateur i indiquant que vous souhaitez ouvrir une session SSH interactive avec le conteneur. L’indicateur i ne ferme pas la session SSH même si le conteneur n’est pas attaché.
  • L’indicateur t alloue un pseudo-TTY qui doit être utilisé pour exécuter des commandes de manière interactive.sudo docker exec -it ccae4670f030 /bin/bash
sudo docker exec -it ccae4670f030 /bin/bash

Vous verrez ci-dessous que vous êtes maintenant connecté au shell du conteneur lorsque vous exécutez docker exec.

SSH into the running container using docker exec command

7. Après vous être connecté au conteneur, vérifiez si myfile.txt a été copié dans le conteneur en utilisant la commande ls.

  • ls est une commande permettant de lister les fichiers informatiques dans les systèmes d’exploitation Unix et de type Unix.
  • grep recherchera tous les fichiers ou dossiers commençant par la chaîne my dans le répertoire usr/share.
Verifying the files in the container

Copie de fichiers à l’aide du DockerFile

Dans la section précédente, vous avez appris à copier les fichiers dans le conteneur en exécutant la commande Docker cp. Et si vous avez besoin de copier plusieurs fichiers en une seule fois ? Bien sûr, exécuter plusieurs commandes devient une surcharge ! Pour résoudre l’exécution de plusieurs commandes cp, pourquoi ne pas essayer de copier des fichiers ou des dossiers dans des conteneurs à l’aide de Dockerfile avec les commandes COPY?

Le déploiement d’un conteneur et la copie des fichiers/dossiers à l’aide de Dockerfile vous permettent de supprimer les étapes de copie manuelle que vous avez effectuées dans la section précédente. Un Dockerfile est un document texte qui contient toutes les commandes qu’un utilisateur pourrait appeler en ligne de commande pour assembler une image.

Créons un Dockerfile, exécutons un conteneur à partir de celui-ci, et enfin copions les fichiers.

1. Créez un dossier nommé ~/host-to-container-copy-demo, puis changez (cd) le répertoire de travail vers ce dossier. Ce dossier contiendra tous les fichiers que vous créerez dans cette démonstration.

mkdir ~/host-to-container-copy-demo
cd ~/host-to-container-copy-demo

2. Maintenant, créez deux fichiers texte nommés myfile1.txt et myfile2.txt, copiez et collez-les dans les fichiers, et enregistrez-les dans le répertoire ~/host-to-container-copy-demo.

# monfichier1.txt
Hello This is my first file !
This is file will be copied in /usr/share directory from Docker host to Docker Container.
# monfichier2.txt
Hello This is my second file !
This is file will be copied in /tmp directory from Docker host to Docker Container.

3. Créez un autre fichier, copiez/collez la configuration ci-dessous, et enregistrez le fichier sous le nom Dockerfile à l’intérieur du répertoire ~/host-to-container-copy-demo. Lorsque vous avez terminé, Docker utilisera ce DockerFile pour exécuter toutes les commandes nécessaires à la construction d’une nouvelle image Docker sur la base de n’importe quelle image de base.

Le DockerFile ci-dessous contient diverses étapes/instructions qui construiront le nouveau conteneur :

  • FROM L’instruction FROM initialise un nouveau stage de construction et définit l’image de base pour les instructions suivantes.
  • COPY La commande COPY copie un fichier de la machine hôte (hôte Docker) vers le conteneur.
# Instruction pour le Dockerfile afin de créer une nouvelle image sur la base de l'image de base (ubuntu)
# Utilisation de l'image de base ubuntu: latest
FROM ubuntu:latest
# Copie de monfichier1.txt dans le répertoire /usr/share du conteneur
COPY myfile1.txt /usr/share
# Copie de monfichier2.txt dans le répertoire /tmp du conteneur
COPY myfile2.txt /tmp

4. Vérifiez tous les fichiers requis pour construire la nouvelle image en exécutant la commande tree. Vous devriez voir Dockerfile, myfile1.txt et myfile2.txt sous le répertoire ~/host-to-container-copy-demo.

Verifies files and folders using tree command

5. Ensuite, construisez l’image en exécutant la commande docker build. Le drapeau t est utilisé pour étiqueter l’image updated_ubuntu_image avec latest et . permet à Docker de sélectionner tous les fichiers nécessaires depuis le répertoire de travail actuel.

sudo docker build -t updated_ubuntu_image:latest .
Building the Docker image by running the docker build command

6. Maintenant, vérifiez la nouvelle image construite updated_ubuntu_image en exécutant la commande docker images. Remarquez l’attribut REPOSITORY. Cet attribut est la balise créée avec le drapeau -t à l’étape précédente.

sudo docker images
Repository Attribute

7. Enfin, exécutez le conteneur Docker en utilisant la nouvelle image construite en exécutant la commande docker run. Le drapeau -it indique à Docker d’allouer un pseudo-terminal connecté à l’entrée standard du conteneur. bash fournit l’invite de commande par défaut pour la connexion de l’utilisateur au système Linux.

sudo docker run -it updated_ubuntu_image bash

Vous verrez ci-dessous que vous êtes maintenant dans l’interpréteur de commandes Bash du conteneur Docker.

Running the container using docker run command.

8. Ensuite, vérifiez si les fichiers ont été copiés avec succès sur le conteneur dans les répertoires /tmp et /usr/share en exécutant la commande ls.

Verifying the files if they are successfully copied on the container

Montage d’un Volume de Stockage et Accès aux Fichiers avec la commande Docker Volume

Jusqu’à présent, vous avez appris comment copier des fichiers de l’hôte vers le conteneur en utilisant deux approches différentes en utilisant la commande docker cp et un DockerFile. Cette fois, apprenons comment partager facilement des systèmes de fichiers entre l’hôte et les conteneurs en utilisant la docker volume commande.

En supposant que vous êtes toujours connecté au terminal:

1. Créez un volume sur l’hôte Docker en exécutant la commande docker volume create. La commande ci-dessous créera un volume nommé my-vol. sudo docker volume create my-vol

sudo docker volume create my-vol

2. Vérifiez que le volume a été créé avec succès en exécutant la commande docker volume ls. La commande docker volume ls liste le volume. Après avoir exécuté la commande docker volume ls, vous verrez my-vol dans l’attribut NOM DU VOLUME, ce qui confirme que le volume est créé avec succès.

sudo docker volume ls
Listing the docker volumes

3. Ensuite, exécutez le conteneur en utilisant la commande docker run.

  • Le conteneur nommé volume_testing utilise l’image nginx: latest.
  • d flag runs the container in the background and keeps it alive until deleted.
  • v flag mounts the volume my-vol created on Docker host to the container’s destination /app directory.
sudo docker run -d --name volume_testing -v my-vol:/app nginx:latest
Running the Docker command and attaching the volume with the container

4. Vérifiez si le volume my-vol que vous avez créé précédemment est correctement monté avec le conteneur en utilisant la commande docker inspect. La commande Docker inspect fournit les informations sur le conteneur. Après avoir exécuté la commande docker inspect, elle affichera tous les détails du conteneur spécifié (détails volume_testing), y compris les détails de montage, comme indiqué ci-dessous.

sudo docker inspect volume_testing

Ci-dessous, l’instantané d’image confirme que le volume (my-vol) que vous avez créé sur l’hôte est monté avec succès avec le répertoire /app du conteneur.

Verifying the volumes in the container

Conclusion

Dans ce tutoriel, vous avez appris différentes façons de copier des fichiers ou des dossiers de l’hôte Docker vers les conteneurs, comme l’utilisation de la commande Docker cp, des commandes de volume Docker et du Dockerfile.

Alors, quelle approche allez-vous utiliser ensuite pour copier des données de l’hôte vers les conteneurs Docker ?

Source:
https://adamtheautomator.com/docker-cp/