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 :
- A Linux host. This tutorial uses Ubuntu 18.04.5 LTS.
- 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
.
- N’importe quelle image Docker téléchargée et disponible. Ce tutoriel utilise la dernière image Docker NGINX disponible sur Docker Hub.
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.
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 port80
to the host on port80
.nginx
sera l’image utilisée pour exécuter le conteneur.

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.

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.
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é.
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’indicateuri
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
Vous verrez ci-dessous que vous êtes maintenant connecté au shell du conteneur lorsque vous exécutez docker exec
.

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înemy
dans le répertoire usr/share.

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.
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.
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.
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.

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.

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.

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.
Vous verrez ci-dessous que vous êtes maintenant dans l’interpréteur de commandes Bash du conteneur Docker.

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
.

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
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.

3. Ensuite, exécutez le conteneur en utilisant la commande docker run
.
- Le conteneur nommé
volume_testing
utilise l’imagenginx: latest
. d
flag runs the container in the background and keeps it alive until deleted.v
flag mounts the volumemy-vol
created on Docker host to the container’s destination/app
directory.

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.
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.

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 ?