Partie 4 · Volumes
Les volumes Docker
Deux problèmes : modifier un fichier de l'application oblige à regénérer l'image (laborieux en développement), et les logs d'un nginx doivent être partagés avec un autre conteneur ou un autre hôte. Les volumes sont des espaces de stockage externes, partageables entre conteneurs ou entre un conteneur et l'hôte. Les accès via un volume outrepassent le CoW : meilleures performances, et les données ne sont pas enregistrées dans une couche, donc pas par un docker commit.
Bonne pratique : les conteneurs immuables : leur contenu ne varie jamais (aucune écriture), les écritures vont sur un volume externe, ce qui permet de partager des espaces communs.
Vérifie que tu as compris
Avec docker run --volume (ou --mount), on associe un espace de stockage au conteneur. Trois types :
| Type | Principe |
|---|---|
| Volume | espace sur l'hôte géré par Docker |
| Bind | espace sur l'hôte indépendant de Docker : un répertoire de l'hôte est monté directement ; plus complexe à maintenir (vérifier l'existence des répertoires) |
| tmpfs | espace créé en mémoire ; utile pour une zone de travail performante |
docker volume create --name=logs docker run -P -v logs:/var/log/nginx -d nginx docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image
Lecture : on crée un volume logs, puis on lance nginx en arrière-plan (-d), avec -P (publie les ports exposés), en montant ce volume sur /var/log/nginx dans le conteneur. La 3e ligne monte un tmpfs en mémoire sur /run, en lecture-écriture, sans exécution (noexec), taille 65536k.
Vérifie que tu as compris
-v logs:/var/log/nginx, que désigne logs ?Vérifie que tu as compris