Montage de volumes
Le paramètre -v
dans la commande docker run
nous permet de monter des volumes, partageant ainsi des données entre l'hôte et le conteneur. Cela est incroyablement utile pour conserver des données ou pour fournir des fichiers de configuration au conteneur.
Commençons par créer une simple structure de répertoires 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 opérations suivantes :
- Créent un nouveau répertoire
nginx-data
à l'intérieur du dossier project
dans votre répertoire personnel.
- Créent un simple fichier HTML nommé
index.html
à l'intérieur de ce nouveau répertoire.
Maintenant, exécutons un conteneur Nginx et montons ce répertoire :
docker run -d --name nginx-volume -p 8081:80 -v ~/project/nginx-data:/usr/share/nginx/html nginx
Décortiquons cette commande :
docker run
: C'est la commande pour exécuter un nouveau conteneur.
-d
: Cela exécute le conteneur en mode détaché (en arrière - plan).
--name nginx-volume
: Cela attribue le nom "nginx-volume" à notre conteneur.
-p 8081:80
: Cela mappe le port 8081 de l'hôte vers le port 80 dans le conteneur.
-v ~/project/nginx-data:/usr/share/nginx/html
: Cela monte le répertoire nginx-data
de notre hôte vers le répertoire /usr/share/nginx/html
dans le conteneur. C'est là que Nginx cherche le contenu à servir.
nginx
: C'est le nom de l'image que nous utilisons pour créer le conteneur.
Maintenant, vérifions que la page personnalisée est bien servie :
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 personnalisé, voici quelques éléments à vérifier :
- Assurez-vous que le fichier
~/project/nginx-data/index.html
existe sur votre système hôte.
- Vérifiez que le conteneur est en cours d'exécution :
docker ps | grep nginx-volume
- Vérifiez les journaux (logs) de Nginx pour toute erreur :
docker logs nginx-volume
Cette méthode de montage d'un répertoire hôte sur un conteneur s'appelle un bind mount (montage par liaison). C'est un moyen simple de partager des fichiers entre l'hôte et le conteneur. 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 à la fois pour l'hôte et le conteneur.
- Faites attention aux autorisations : le conteneur s'exécute par défaut en tant que root, ce qui peut créer des fichiers que votre utilisateur hôte ne peut pas modifier.
En utilisant cette méthode, nous évitons l'erreur "not a directory" (n'est pas un répertoire) car nous montons un répertoire et non un seul fichier. Cette approche vous offre plus de flexibilité pour ajouter, supprimer ou modifier des fichiers sans avoir à recréer le conteneur.