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

Comment copier des fichiers avec Docker cp dans 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 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 conteneur 80 à l'hôte sur le port 80 .
  • 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. Le i 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îne my à 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 le nginx: latest photo.
  • d flag exécute le conteneur en arrière-plan et le maintient actif jusqu'à sa suppression.
  • v flag monte le volume my-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 ?


Docker
  1. Comment installer WordPress avec Docker sur Ubuntu

  2. Comment installer Jenkins avec Docker

  3. Comment déployer un conteneur nginx avec Docker sur Linode

  4. Comment exécuter MySQL dans un conteneur Docker

  5. Comment attribuer une adresse IP statique à un conteneur Docker

Comment indexer les dépendances de votre image Docker avec Syft

Comment exécuter Grafana dans un conteneur Docker

Améliorez votre jeu DevOps avec ces exemples d'exécution Docker

Comment créer une image Windows Docker avec la balise Docker Build

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

Comment accéder aux fichiers en dehors d'un conteneur Docker