Montage de volumes
Le paramètre -v de docker run permet de monter des volumes, partageant ainsi des données entre l'hôte et le conteneur. C'est extrêmement utile pour rendre les données persistantes ou pour fournir des fichiers de configuration au conteneur.
Commençons par créer une structure de répertoire simple sur notre hôte :
mkdir -p ~/project/nginx-data
echo "<html><body><h1>Hello from mounted volume</h1></body></html>" > ~/project/nginx-data/index.html
Ces commandes effectuent les actions suivantes :
- Créent un nouveau répertoire
nginx-data à l'intérieur du dossier project dans votre répertoire personnel.
- Créent un fichier HTML simple nommé
index.html dans ce nouveau répertoire.
Maintenant, lançons un conteneur Nginx en montant ce répertoire :
docker run -d --name nginx-volume -p 8081:80 -v ~/project/nginx-data:/usr/share/nginx/html nginx
Analysons cette commande :
docker run : Commande pour lancer un nouveau conteneur.
-d : Exécute le conteneur en arrière-plan.
--name nginx-volume : Attribue le nom "nginx-volume" à notre conteneur.
-p 8081:80 : Mappe le port 8081 de l'hôte vers le port 80 du conteneur.
-v ~/project/nginx-data:/usr/share/nginx/html : Monte le répertoire nginx-data de notre hôte vers le répertoire /usr/share/nginx/html du conteneur. C'est là que Nginx cherche le contenu à diffuser.
nginx : L'image utilisée.
Vérifions maintenant que notre page personnalisée est bien diffusée :
curl http://localhost:8081
Vous devriez voir le contenu de votre fichier HTML personnalisé : "Hello from mounted volume!"
Si vous ne voyez pas votre contenu, vérifiez les points suivants :
- Assurez-vous que le fichier
~/project/nginx-data/index.html existe bien sur votre système hôte.
- Vérifiez que le conteneur tourne :
docker ps | grep nginx-volume
- Consultez les journaux de Nginx pour d'éventuelles erreurs :
docker logs nginx-volume
Cette méthode de montage d'un répertoire hôte dans un conteneur est appelée un "bind mount". C'est un moyen direct de partager des fichiers. Voici quelques points clés à retenir :
- Le chemin du répertoire hôte doit être un chemin absolu.
- Si le répertoire hôte n'existe pas, Docker le créera automatiquement.
- Toute modification apportée aux fichiers dans ce répertoire (que ce soit sur l'hôte ou dans le conteneur) sera immédiatement visible des deux côtés.
- Attention aux permissions : le conteneur s'exécute par défaut en tant que root, ce qui pourrait créer des fichiers que votre utilisateur hôte ne pourra pas modifier.
En utilisant cette méthode, nous évitons l'erreur "not a directory" car nous montons un répertoire complet et non un fichier unique. Cette approche vous offre plus de flexibilité pour ajouter, supprimer ou modifier des fichiers sans avoir à recréer le conteneur.