Comment utiliser la commande docker compose 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 la commande docker compose cp pour copier des fichiers et des répertoires entre un conteneur de service et le système de fichiers local. Nous commencerons par configurer un projet Docker Compose simple, incluant l'installation de Docker Compose et la création d'un fichier docker-compose.yml de base avec un service basé sur l'image Ubuntu.

Après la configuration du projet, vous pratiquerez la copie d'un fichier du conteneur de service vers votre machine locale, puis la copie d'un fichier de votre machine locale vers le conteneur de service. Enfin, vous apprendrez à copier un répertoire entier du conteneur de service vers votre système de fichiers local, démontrant ainsi la flexibilité de la commande docker compose cp pour gérer les données dans vos environnements Docker Compose.


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/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-555075{{"Comment utiliser la commande docker compose cp pour copier des fichiers"}} docker/ps -.-> lab-555075{{"Comment utiliser la commande docker compose cp pour copier des fichiers"}} docker/exec -.-> lab-555075{{"Comment utiliser la commande docker compose cp pour copier des fichiers"}} docker/pull -.-> lab-555075{{"Comment utiliser la commande docker compose cp pour copier des fichiers"}} docker/cp -.-> lab-555075{{"Comment utiliser la commande docker compose cp pour copier des fichiers"}} end

Préparer un projet Docker Compose simple

Dans cette étape, nous allons préparer un projet Docker Compose simple. Comme Docker Compose n'est pas préinstallé dans l'environnement LabEx, nous allons d'abord l'installer. Docker Compose est un outil permettant de définir et d'exécuter des applications multi-conteneurs Docker. Avec Compose, vous utilisez un fichier YAML pour configurer les services de votre application. Ensuite, avec une seule commande, vous créez et démarrez tous les services à partir de votre configuration.

Tout d'abord, installons Docker Compose. Nous allons télécharger le binaire Docker Compose et le rendre exécutable.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Maintenant, vérifions l'installation en contrôlant la version de Docker Compose.

docker-compose --version

Vous devriez voir une sortie similaire à Docker Compose version v2.20.2.

Ensuite, nous allons créer un projet Docker Compose simple. Nous créerons un répertoire pour notre projet puis un fichier docker-compose.yml à l'intérieur. Ce fichier définira un service simple utilisant l'image ubuntu.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app
nano docker-compose.yml

Dans l'éditeur nano, collez le contenu suivant dans le fichier docker-compose.yml :

version: "3.8"
services:
  my-service:
    image: ubuntu:latest
    command: tail -f /dev/null

Appuyez sur Ctrl + X, puis Y, et Entrée pour sauvegarder et quitter l'éditeur.

Analysons le fichier docker-compose.yml :

  • version: '3.8' spécifie la version du format de fichier Docker Compose.
  • services: définit les services composant votre application.
  • my-service: est le nom de notre service.
  • image: ubuntu:latest spécifie l'image Docker à utiliser pour ce service. Nous utilisons la dernière version de l'image Ubuntu.
  • command: tail -f /dev/null est la commande exécutée au démarrage du conteneur. Cette commande maintient le conteneur en fonctionnement indéfiniment sans consommer de ressources significatives, ce qui est utile pour les tests et le débogage.

Avant de démarrer le service, nous devons récupérer l'image ubuntu:latest.

docker pull ubuntu:latest

Maintenant, nous pouvons démarrer le service avec la commande docker-compose up. L'option -d exécute les conteneurs en mode détaché, c'est-à-dire en arrière-plan.

docker-compose up -d

Vous devriez voir une sortie indiquant que le service est en cours de création et de démarrage.

Enfin, vérifions l'état du service en cours d'exécution avec la commande docker-compose ps.

docker-compose ps

Vous devriez voir une sortie montrant que le conteneur my-service est en cours d'exécution.

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

Dans cette étape, nous allons apprendre à copier un fichier d'un conteneur Docker en cours d'exécution vers votre système de fichiers local. Il s'agit d'une tâche courante lorsque vous avez besoin de récupérer des journaux, des fichiers de configuration ou d'autres données générées à l'intérieur d'un conteneur.

Nous utiliserons la commande docker cp à cet effet. La commande docker cp copie des fichiers/répertoires entre un conteneur et le système de fichiers local. La syntaxe est docker cp <conteneur>:<chemin_source> <chemin_destination> pour copier d'un conteneur vers le système de fichiers local, et docker cp <chemin_source> <conteneur>:<chemin_destination> pour copier du système de fichiers local vers un conteneur.

Tout d'abord, créons un fichier simple dans notre conteneur my-service en cours d'exécution. Nous utiliserons la commande docker exec pour exécuter une commande à l'intérieur du conteneur. La commande docker exec exécute une nouvelle commande dans un conteneur en cours d'exécution.

Assurez-vous d'être dans le répertoire ~/project/my-compose-app.

cd ~/project/my-compose-app
docker-compose exec my-service bash -c "echo 'Ceci est un fichier test dans le conteneur.' > /tmp/container_file.txt"

Cette commande exécute un shell bash dans le conteneur my-service puis exécute la commande echo pour créer un fichier nommé /tmp/container_file.txt avec un contenu spécifique.

Maintenant, copions ce fichier du conteneur vers notre système de fichiers local. Nous le copierons dans le répertoire courant (~/project/my-compose-app).

docker-compose cp my-service:/tmp/container_file.txt .

La commande docker-compose cp est similaire à docker cp, mais fonctionne avec les noms de services définis dans votre fichier docker-compose.yml. my-service est le nom de notre service, /tmp/container_file.txt est le chemin du fichier dans le conteneur, et . représente le répertoire courant sur notre système de fichiers local.

Après avoir exécuté la commande, vous devriez voir le fichier container_file.txt dans votre répertoire ~/project/my-compose-app. Vérifions son existence et son contenu.

ls container_file.txt
cat container_file.txt

Vous devriez voir le nom du fichier listé et le contenu "Ceci est un fichier test dans le conteneur." affiché dans la console.

Copier un fichier du système de fichiers local vers un conteneur de service

Dans cette étape, nous allons apprendre à copier un fichier de votre système de fichiers local vers un conteneur Docker en cours d'exécution. Cette opération est utile lorsque vous avez besoin d'ajouter des fichiers de configuration, des scripts ou d'autres données à un conteneur après son démarrage.

Nous utiliserons à nouveau la commande docker cp, mais cette fois dans le sens inverse : docker cp <chemin_source> <conteneur>:<chemin_destination>.

Tout d'abord, créons un fichier simple sur notre système de fichiers local dans le répertoire ~/project/my-compose-app.

cd ~/project/my-compose-app
echo "Ce fichier provient du système de fichiers local." > local_file.txt

Maintenant, copions ce fichier local_file.txt de notre système de fichiers local vers le répertoire /tmp/ à l'intérieur du conteneur my-service.

docker-compose cp local_file.txt my-service:/tmp/

La commande docker-compose cp est utilisée ici. local_file.txt est le chemin du fichier sur notre système de fichiers local, my-service est le nom de notre service, et /tmp/ est le répertoire de destination dans le conteneur.

Pour vérifier que le fichier a bien été copié, nous allons exécuter une commande à l'intérieur du conteneur pour vérifier la présence du fichier et afficher son contenu.

docker-compose exec my-service cat /tmp/local_file.txt

Cette commande exécute cat /tmp/local_file.txt dans le conteneur my-service. Vous devriez voir le contenu "Ce fichier provient du système de fichiers local." affiché dans votre console, confirmant que le fichier a été correctement copié.

Copier un répertoire d'un conteneur de service vers le système de fichiers local

Dans cette étape, nous allons apprendre à copier un répertoire entier 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 répertoires de sortie d'application, des répertoires de journaux ou toute autre structure de répertoires générée dans le conteneur.

Nous utiliserons à nouveau la commande docker cp, similaire à la copie d'un fichier, mais en spécifiant un chemin de répertoire.

Tout d'abord, créons un répertoire et quelques fichiers à l'intérieur dans notre conteneur my-service en cours d'exécution. Nous utiliserons docker-compose exec pour exécuter des commandes dans le conteneur.

Assurez-vous d'être dans le répertoire ~/project/my-compose-app.

cd ~/project/my-compose-app
docker-compose exec my-service bash -c "mkdir /tmp/container_dir && echo 'File 1' > /tmp/container_dir/file1.txt && echo 'File 2' > /tmp/container_dir/file2.txt"

Cette commande crée un répertoire nommé /tmp/container_dir dans le conteneur my-service, puis crée deux fichiers, file1.txt et file2.txt, dans ce répertoire.

Maintenant, copions ce répertoire entier du conteneur vers notre système de fichiers local. Nous le copierons dans le répertoire courant (~/project/my-compose-app).

docker-compose cp my-service:/tmp/container_dir .

La commande docker-compose cp est utilisée ici. my-service est le nom de notre service, /tmp/container_dir est le chemin du répertoire dans le conteneur, et . représente le répertoire courant sur notre système de fichiers local.

Après avoir exécuté la commande, vous devriez voir un nouveau répertoire nommé container_dir dans votre répertoire ~/project/my-compose-app. Vérifions son existence et listons son contenu.

ls container_dir
ls container_dir/file1.txt container_dir/file2.txt

Vous devriez voir le répertoire container_dir listé, puis les noms des deux fichiers qu'il contient (file1.txt et file2.txt) devraient apparaître.

Enfin, nettoyons les services Docker Compose que nous avons démarrés.

docker-compose down

Cette commande arrête et supprime les conteneurs, réseaux et volumes créés par docker-compose up.

Résumé

Dans ce labo, nous avons appris à utiliser la commande docker compose cp pour copier des fichiers et répertoires entre un conteneur de service et le système de fichiers local. Nous avons commencé par préparer un projet Docker Compose simple, ce qui a impliqué l'installation de Docker Compose et la création d'un fichier docker-compose.yml définissant un service de base utilisant l'image Ubuntu.

Après la configuration du projet, nous avons pratiqué la copie :

  1. D'un fichier du conteneur de service vers le système de fichiers local
  2. D'un fichier du système de fichiers local vers le conteneur de service
  3. D'un répertoire entier du conteneur de service vers le système de fichiers local

Ces étapes ont démontré l'application pratique de la commande docker compose cp pour gérer les transferts de données dans un environnement Docker Compose.