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 didacticiel, 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 étape par étape, assurez-vous d'avoir les éléments suivants :
- Un hôte Linux. Ce didacticiel utilise 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
.
- Toute image Docker téléchargée et disponible. Ce didacticiel utilise la dernière image NGINX Docker disponible sur Docker Hub.
Copier des fichiers avec le docker cp
Commande
Pour démarrer ce didacticiel, vous apprendrez à copier des fichiers de l'hôte Docker vers les conteneurs à l'aide du docker cp
commande. Le docker cp
La commande 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 à utiliser la commande Docker cp avec un exemple.
1. Ouvrez un terminal sur votre ordinateur local.
2. Créez un fichier nommé monfichier.txt en utilisant le touch
commande. Le monfichier.txt sera copié de l'hôte docker vers le conteneur.
touch myfile.txt
3. Exécutez l'docker run
commande. L'exécution du docker ci-dessous créera un nouveau conteneur en arrière-plan. La commande ci-dessous contient trois paramètres décrits ci-dessous :
d
drapeau qui exécute le conteneur en arrière-plan et le maintient actif jusqu'à sa suppression.p
flag publie le port d'un conteneur80
à l'hôte sur le port80
.nginx
sera l'image qui sera utilisée pour exécuter le conteneur.
sudo docker run -d -p 80:80 nginx
4. Vérifiez si le conteneur Docker est créé avec succès à l'aide du docker ps
commande. Après avoir exécuté le docker ps
commande, 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 a été créé avec succès.
sudo docker ps
Avant d'exécuter la commande Docker cp, la syntaxe de la commande Docker cp est :
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 :
- Utilisation d'archive ou d'un - Copie toutes les autorisations d'utilisateur et de groupe principal des fichiers et dossiers.
- Utilisation de L – La spécification de l'option L permettra à tout lien symbolique du chemin source d'être copié vers le chemin de destination.
# Syntax to Copy from Container to Docker Host
docker cp {options} CONTAINER:SRC_PATH DEST_PATH
# Syntax to Copy from Docker Host to Container
docker cp {options} SRC_PATH CONTAINER:DEST_PATH
5. Ensuite, exécutez le docker cp
commande. Le docker cp
la commande copiera le monfichier.txt que vous avez créé précédemment dans les conteneurs /usr/share annuaire. ccae4670f030
est l'ID du conteneur auquel le myfile.txt sera copié.
sudo docker cp myfile.txt ccae4670f030:/usr/share
6. Enfin, SSH dans le conteneur en cours d'exécution en exécutant le docker exec
commande avec /bin/bash
, qui est utilisé comme shell par défaut pour la connexion utilisateur du système Linux.
- Le
i
drapeau indiquant que vous souhaitez ouvrir une session SSH interactive vers le conteneur. Lei
flag ne ferme pas la session SSH même si le conteneur n'est pas attaché. - Le
t
flag alloue un pseudo-TTY qui peut ê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
.
7. Après vous être connecté au conteneur, vérifiez si myfile.txt a été copié dans le conteneur à l'aide de la commande ls.
ls
est une commande pour répertorier les fichiers informatiques dans les systèmes d'exploitation Unix et de type Unix.grep
recherchera tous les fichiers ou dossiers, en commençant par la chaînemy
à l'intérieur de usr/share annuaire.
Copier des fichiers à l'aide de DockerFile
Dans la section précédente, vous avez appris à copier les fichiers dans le conteneur en exécutant la commande Docker cp. Que faire si vous avez besoin de copier plusieurs fichiers en une seule fois ? Certes, exécuter plusieurs commandes devient un surcoût ! 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 COPY
commandes ?
Déployer un conteneur et copier les fichiers/dossiers à l'aide de Dockerfile vous permet 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 peut appeler sur la 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 de ce dossier. Ce dossier contiendra tous les fichiers que vous allez créer dans cette démo.
mkdir ~/host-to-container-copy-demo
cd ~/host-to-container-copy-demo
2. Maintenant, créez deux fichiers texte nommés myfile1.tx t et monfichier2.txt , copiez-les et collez-les dans les fichiers et enregistrez-les dans ~/host-to-container-copy-demo annuaire.
# myfile1.txt
Hello This is my first file !
This is file will be copied in /usr/share directory from Docker host to Docker Container.
# myfile2.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 Dockerfile à l'intérieur de la ~/host-to-container-copy-demo annuaire. Une fois terminé, Docker utilisera ce DockerFile pour exécuter toutes les commandes nécessaires pour créer une nouvelle image Docker au-dessus de n'importe quelle image de base.
Le DockerFile ci-dessous contient diverses étapes/instructions qui permettront de créer le nouveau conteneur :
FROM
– L'instruction FROM initialise une nouvelle étape 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 for Dockerfile to create a new image on top of the base image (ubuntu)
# Using the base image ubuntu: latest
FROM ubuntu:latest
# Copying myfile1.txt to the containers /usr/share directory
COPY myfile1.txt /usr/share
# Copying myfile2.txt to the containers /tmp directory
COPY myfile2.txt /tmp
4. Vérifiez tous les fichiers requis pour créer la nouvelle image en exécutant l'tree
commande. Vous devriez voir Dockerfile, myfile1.txt et myfile2.txt sous ~/host-to-container-copy-demo annuaire.
5. Ensuite, créez l'image en exécutant le docker build
commande. Le t
flag est utilisé pour taguer l'image updated_ubuntu_image
avec le latest
et.
permet à docker de sélectionner tous les fichiers nécessaires dans le répertoire de travail actuel.
sudo docker build -t updated_ubuntu_image:latest .
6. Maintenant, vérifiez l'image nouvellement construite updated_ubuntu_image
en exécutant les docker images
commande. Notez le RÉPOSITOIRE attribut. Cet attribut est le tag créé avec le -t
drapeau à l'étape précédente.
sudo docker images
7. Enfin, exécutez le conteneur docker à l'aide de l'image nouvellement créée en exécutant le docker run
commande. Le -it
indique à Docker d'allouer un pseudo-terminal connecté au stdin du conteneur. bash
fournit le shell par défaut pour la connexion utilisateur du système Linux.
sudo docker run -it updated_ubuntu_image bash
Vous verrez ci-dessous que vous êtes maintenant dans le shell 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 le ls
commande.
Montage d'un volume de stockage et accès aux fichiers avec le Docker Volume
Commande
Jusqu'à présent, vous avez appris à copier des fichiers d'un hôte à un conteneur en utilisant deux approches différentes en utilisant le docker cp
commande et un DockerFile . Cette fois, apprenons à partager facilement des systèmes de fichiers entre l'hôte et les conteneurs à l'aide du 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 docker volume create
commande. 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 le docker volume ls
commande. La commande docker volume ls répertorie le volume. Après avoir exécuté le docker volume ls
commande, vous verrez my-vol
dans l'attribut VOLUME NAME qui confirme que le volume a été créé avec succès.
sudo docker volume ls
3. Ensuite, exécutez le conteneur à l'aide de docker run
commande.
- Le conteneur nommé
volume_testing
utilise lenginx: latest
photo. d
flag exécute le conteneur en arrière-plan et le maintient actif jusqu'à sa suppression.v
flag monte le volumemy-vol
créé sur l'hôte Docker vers la destination du conteneur/app
annuaire.
sudo docker run -d --name volume_testing -v my-vol:/app nginx:latest
4. Vérifiez si le volume my-vol que vous avez créé précédemment est correctement monté avec le conteneur à l'aide de docker inspect
commande. La commande Docker inspect fournit les informations du conteneur. Après avoir exécuté le docker inspect
commande, elle affichera tous les détails du conteneur spécifié (volume_testing
) les détails, y compris les détails de montage, comme indiqué ci-dessous.
sudo docker inspect volume_testing
Ci-dessous, l'instantané de l'image confirme que le volume (my-vol
) que vous avez créé sur l'hôte est monté avec succès avec le conteneur /app
annuaire.
Conclusion
Dans ce didacticiel, vous avez appris différentes manières de copier des fichiers ou des dossiers de l'hôte Docker vers des conteneurs, comme l'utilisation de la commande Docker cp, des commandes de volume Docker et de Dockerfile.
Alors, quelle approche allez-vous utiliser ensuite lors de la copie des données de l'hôte vers les conteneurs Docker ?