Copier les fichiers de l'hôte vers le conteneur Docker

Isaac Tony 15 février 2024
  1. Utilisez docker cp pour copier des fichiers de l’hôte vers le conteneur Docker
  2. Utilisez docker volume pour copier des fichiers de l’hôte vers le conteneur Docker
Copier les fichiers de l'hôte vers le conteneur Docker

Cet article discutera et démontrera les méthodes que nous pouvons utiliser pour transférer des fichiers de notre machine hôte vers un conteneur en cours d’exécution dans Docker.

Utilisez docker cp pour copier des fichiers de l’hôte vers le conteneur Docker

La commande docker cp est l’un des moyens les plus simples que nous puissions utiliser pour copier des fichiers et des répertoires de notre machine hôte vers un conteneur Docker. Nous utiliserons Ubuntu 20.4.5 et la dernière version de Docker à l’époque, qui est la v 19.03.

Syntaxe:

docker cp {options} PATH_HOST CONTAINER:PATH_TO_CONTAINER 

Où:

  • PATH_HOST spécifie le chemin source où se trouve le fichier que nous voulons copier sur l’hôte.
  • PATH_TO_CONTAINER est le chemin de destination où nous voulons stocker le fichier sur le conteneur.

Exemple:

Nous allons commencer par créer notre conteneur cible. Nous utiliserons l’image officielle Nginx pour cet article, que nous pouvons extraire via le bureau Docker ou le terminal en exécutant la commande ci-dessous.

$ docker pull nginx

Production:

Using default tag: latest
latest: Pulling from library/nginx
5eb5b503b376: Pull complete
1ae07ab881bd: Pull complete
78091884b7be: Pull complete
091c283c6a66: Pull complete
55de5851019b: Pull complete
b559bad762be: Pull complete
Digest: sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

Nous utilisons la commande suivante pour vérifier que nous avons réussi à extraire l’image du registre.

$ docker images

Production:

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    c316d5a335a5   2 weeks ago   142MB

Nous pouvons maintenant créer un conteneur. À l’aide de la commande run, nous allons créer un conteneur et le déployer en mode détaché pour écouter sur le port externe 8080 et le port interne 80.

La commande ci-dessous créera un conteneur à l’aide de l’image de base Nginx.

$ docker run -d -p 8080:80 nginx

Nous pouvons vérifier que nous avons bien créé un nouveau conteneur en exécutant la commande docker ps -a. Cela répertoriera tous les conteneurs que nous avons créés récemment et dans le passé, ainsi que leurs ID de conteneur et leurs images respectives.

Nous pouvons exécuter cela comme indiqué ici.

docker ps -a

Production:

CONTAINER ID   IMAGE   COMMAND                  CREATED              STATUS              PORTS                  NAMES
0c57de10362b   nginx   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp   lucid_booth

Avant d’utiliser la commande docker cp, nous devons créer un fichier que nous allons copier de l’hôte vers le conteneur que nous venons de créer.

Nous allons créer un fichier nommé nouveau_fichier.txt et le stocker dans le répertoire personnel à l’aide de la commande touch.

Voici la commande pour le faire.

$ touch new_file.txt

Nous pouvons afficher le répertoire pour nous assurer que nous avons créé le fichier avec succès à l’aide de la commande ls, comme indiqué ici.

isaac@DESKTOP-HV44HT6:~$ ls
new_file.txt

Bien entendu, new_file.txt est un fichier vide ; cependant, nous voulons nous concentrer sur l’utilisation de la commande docker cp pour le déplacer de l’hôte vers le conteneur que nous avons créé précédemment.

Nous copions ensuite ce fichier dans le conteneur que nous avons créé.

$ docker cp new_file.txt 0c57de10362b:/usr/share

Juste comme ça, nous avons copié new_file.txt dans le conteneur avec l’ID 0c57de10362b sous le dossier /usr/share.

Nous pouvons le vérifier en accédant au conteneur en cours d’exécution via une session SSH interactive à l’aide de la commande docker exec et du drapeau -it pour exécuter les commandes de manière interactive.

$ docker exec -it 0c57de10362b /bin/bash

Maintenant que nous sommes connectés au conteneur, nous voulons lister les fichiers pour vérifier que nous avons copié ce fichier dans ce conteneur. Nous pouvons utiliser à nouveau la commande ls mais spécifiez le dossier auquel nous voulons accéder.

root@0c57de10362b:/# ls -lh /usr/share/

Production:

afficher un fichier copié dans le conteneur Docker à partir de l’hôte

De même, nous pouvons également copier un répertoire contenant de nombreux fichiers en changeant simplement l’emplacement des fichiers à lire à partir du répertoire, comme indiqué ci-dessous.

$ docker cp src/directory/. container-id:/target_location/directory

La commande docker cp, bien que simple d’utilisation, présente certaines limitations. Sa syntaxe est différente de la commande Unix cp et ne supporte qu’un nombre limité de balises.

De plus, cela ne peut être utilisé que pour copier des fichiers de l’hôte vers un conteneur et non entre conteneurs.

Utilisez docker volume pour copier des fichiers de l’hôte vers le conteneur Docker

Une meilleure approche pour copier des fichiers entre conteneurs consiste à utiliser le docker volume.

Nous pouvons attacher des volumes contenant des fichiers que nous voulons copier dans un conteneur pendant le processus de création du conteneur en utilisant l’un des deux drapeaux, -v ou -mount.

Pour utiliser des volumes dans Docker, nous en créons d’abord un à l’aide de la commande docker volume, comme indiqué ci-dessous.

$ docker volume create volume_one

En utilisant docker volume ls, nous pouvons vérifier que nous avons créé le volume avec succès. Cela listera les noms des volumes créés maintenant et dans le passé et le nom du pilote.

isaac@DESKTOP-HV44HT6:~$ docker volume ls
DRIVER    VOLUME NAME
local     volume_one

Maintenant que nous avons créé un volume, l’étape suivante consiste à créer un nouveau conteneur à l’aide de la commande run et à attacher le volume que nous avons créé à l’aide du drapeau -v.

Le drapeau -v nous permet d’attacher le nouveau volume au conteneur que nous créons. Nous allons créer ce conteneur en utilisant la dernière version de l’image de base Nginx.

$ docker run -d -v volume_one:/app nginx:latest
f2457d3eb8fe14645b9e3938017c02c46a657c9ad3323ff4c03924d2fddd7046

Nous pouvons renvoyer des informations de bas niveau sur les objets Docker à l’aide de la commande Docker inspect. Nous allons vérifier si notre volume a été correctement attaché au conteneur que nous avons créé.

Comme nous n’avons attribué aucun nom à ce conteneur, nous utiliserons l’ID du conteneur pour l’inspecter. Nous utiliserons l’ID de conteneur le plus récent et non le plus ancien.

$ docker ps -a

Production:

CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS                  NAMES
f2457d3eb8fe   nginx:latest   "/docker-entrypoint.…"   4 minutes ago       Up 4 minutes       80/tcp                 brave_kirch
0c57de10362b   nginx          "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8080->80/tcp   lucid_booth

Nous pouvons maintenant utiliser cet ID de conteneur pour inspecter le conteneur.

$ docker inspect f2457d3eb8fe

Production:

Inspecter un volume monté dans un conteneur docker

Un des avantages de la commande docker volume est de créer un répertoire unique partagé avec plusieurs conteneurs.

Auteur: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

Article connexe - Docker Container