<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Volume on slash-root.fr</title><link>https://beta.slash-root.fr/tags/volume/</link><description>Recent content in Volume on slash-root.fr</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><lastBuildDate>Sun, 15 Jun 2025 16:56:25 +0200</lastBuildDate><atom:link href="https://beta.slash-root.fr/tags/volume/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker : Configuration et gestion du stockage</title><link>https://beta.slash-root.fr/docker-configuration-et-gestion-du-stockage/</link><pubDate>Sun, 15 Jun 2025 16:56:25 +0200</pubDate><guid>https://beta.slash-root.fr/docker-configuration-et-gestion-du-stockage/</guid><description>&lt;img src="https://beta.slash-root.fr/docker-configuration-et-gestion-du-stockage/cover.png" alt="Featured image of post Docker : Configuration et gestion du stockage" /&gt;&lt;p&gt;Salut les admins sys et autres dompteurs de conteneurs ! Aujourd'hui, plongeons dans les profondeurs du stockage Docker. Comme on dit dans notre jargon : &amp;quot;Un disque mal configuré est à un admin système ce que Kryptonite est à Superman - une faiblesse qui peut tout paralyser.&amp;quot;&lt;/p&gt;
&lt;h2 id="comprendre-le-stockage-dans-docker"&gt;&lt;a href="#comprendre-le-stockage-dans-docker" class="header-anchor"&gt;&lt;/a&gt;Comprendre le stockage dans Docker
&lt;/h2&gt;&lt;p&gt;Docker utilise un système de stockage en couches qui peut être à la fois génial et déroutant. Chaque instruction dans un Dockerfile crée une nouvelle couche en lecture seule, et seul le conteneur en fonctionnement dispose d'une couche supérieure en lecture-écriture.&lt;/p&gt;
&lt;p&gt;Par défaut, Docker stocke toutes ses données (images, conteneurs, volumes) dans &lt;code&gt;/var/lib/docker&lt;/code&gt;. Sur un serveur de production, cette partition peut rapidement devenir le goulot d'étranglement de votre système.&lt;/p&gt;
&lt;h3 id="configuration-du-pilote-de-stockage"&gt;&lt;a href="#configuration-du-pilote-de-stockage" class="header-anchor"&gt;&lt;/a&gt;Configuration du pilote de stockage
&lt;/h3&gt;&lt;p&gt;Docker propose plusieurs pilotes de stockage, chacun avec ses avantages et inconvénients. Vous pouvez configurer le pilote à utiliser dans le fichier &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;storage-driver&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;overlay2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note :&lt;/strong&gt; &lt;code&gt;overlay2&lt;/code&gt; est généralement le pilote recommandé pour les distributions Linux modernes, offrant le meilleur équilibre entre performance et fonctionnalités.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Après cette modification, un redémarrage du service Docker est nécessaire :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl restart docker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="les-différents-pilotes-de-stockage"&gt;&lt;a href="#les-diff%c3%a9rents-pilotes-de-stockage" class="header-anchor"&gt;&lt;/a&gt;Les différents pilotes de stockage
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;overlay2&lt;/strong&gt; : Le pilote recommandé pour la plupart des cas d'usage&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avantages : Bonnes performances, compatibilité&lt;/li&gt;
&lt;li&gt;Prérequis : Noyau Linux 4.0+ et systèmes de fichiers modernes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le pilote overlay2 repose sur la fonctionnalité OverlayFS du noyau Linux, qui permet de superposer plusieurs systèmes de fichiers. Il fonctionne avec la plupart des systèmes de fichiers courants (ext4, xfs) et offre de bien meilleures performances que l'ancien pilote overlay.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;devicemapper&lt;/strong&gt; : Utilisé principalement sur les anciennes versions de CentOS/RHEL&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour la production, configurez-le en mode &lt;code&gt;direct-lvm&lt;/code&gt; plutôt qu'en mode loop-lvm par défaut&lt;/li&gt;
&lt;li&gt;Permet d'utiliser un périphérique de bloc dédié pour les données Docker, offrant de meilleures performances&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;storage-driver&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;devicemapper&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;storage-opts&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;dm.directlvm_device=/dev/xvdf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Systèmes de fichiers avancés et distribués&lt;/strong&gt; : Pour aller plus loin&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les systèmes comme &lt;strong&gt;btrfs&lt;/strong&gt; et &lt;strong&gt;zfs&lt;/strong&gt; offrent des fonctionnalités avancées comme les snapshots&lt;/li&gt;
&lt;li&gt;Les systèmes de fichiers distribués comme &lt;strong&gt;Ceph&lt;/strong&gt; ou &lt;strong&gt;GlusterFS&lt;/strong&gt; permettent de créer une infrastructure de stockage Docker hautement disponible et évolutive&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Astuce&lt;/strong&gt; : Pour tirer pleinement profit de ces systèmes distribués, utilisez la technique du &amp;quot;volume bind déguisé&amp;quot; qui permet de créer un volume Docker qui pointe vers un point de montage réseau&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="déplacer-le-répertoire-de-données-docker"&gt;&lt;a href="#d%c3%a9placer-le-r%c3%a9pertoire-de-donn%c3%a9es-docker" class="header-anchor"&gt;&lt;/a&gt;Déplacer le répertoire de données Docker
&lt;/h2&gt;&lt;p&gt;Si votre partition &lt;code&gt;/var&lt;/code&gt; est trop petite, vous pouvez déplacer le répertoire de données Docker vers un autre emplacement :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;data-root&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/mnt/docker-data&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Attention :&lt;/strong&gt; Ne modifiez jamais ce paramètre sur une installation Docker existante sans migrer correctement les données !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour migrer les données d'une installation existante :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Arrêter Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl stop docker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Créer le nouveau répertoire&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkdir -p /mnt/docker-data
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Copier les données existantes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo rsync -aP /var/lib/docker/ /mnt/docker-data/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Configurer le nouveau chemin dans daemon.json&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Puis redémarrer Docker&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl start docker
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="volumes-bind-déguisés--la-technique-du-ninja-du-stockage"&gt;&lt;a href="#volumes-bind-d%c3%a9guis%c3%a9s--la-technique-du-ninja-du-stockage" class="header-anchor"&gt;&lt;/a&gt;Volumes bind déguisés : la technique du ninja du stockage
&lt;/h2&gt;&lt;p&gt;Une des techniques les plus astucieuses dans l'arsenal de l'admin Docker est celle du &amp;quot;volume bind déguisé&amp;quot; - ou comment faire passer un bind mount pour un volume Docker respectable, tout en gardant le contrôle sur l'emplacement physique des données.&lt;/p&gt;
&lt;p&gt;Imaginez pouvoir dire à vos conteneurs : &amp;quot;Voici un volume Docker standard&amp;quot; alors qu'en coulisses, vous stockez les données sur votre cluster Ceph soigneusement configuré. C'est comme servir un plat végétarien à vos invités sans qu'ils ne remarquent l'absence de viande - l'élégance à l'état pur.&lt;/p&gt;
&lt;p&gt;Cette technique est particulièrement précieuse quand vous travaillez avec :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des systèmes de stockage distribués (Ceph, GlusterFS)&lt;/li&gt;
&lt;li&gt;Des montages NFS pour un stockage partagé&lt;/li&gt;
&lt;li&gt;Des volumes qui doivent survivre à la migration de vos conteneurs&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pour les détails d'implémentation&lt;/strong&gt;, consultez mon article dédié : &lt;a href="https://beta.slash-root.fr/docker-volume-bind-deguise/"&gt;Docker : Volume bind déguisé&lt;/a&gt; qui vous explique pas à pas comment mettre en place cette technique.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="nettoyage-de-lespace-disque"&gt;&lt;a href="#nettoyage-de-lespace-disque" class="header-anchor"&gt;&lt;/a&gt;Nettoyage de l&amp;rsquo;espace disque
&lt;/h2&gt;&lt;p&gt;Docker a tendance à accumuler des données inutilisées. Voici quelques commandes pour faire le ménage :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Supprimer les conteneurs arrêtés, réseaux non utilisés, images dangling et cache de build&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker system prune
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Pour être encore plus agressif et supprimer aussi les images non utilisées&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker system prune -a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Pour récupérer de l&amp;#39;espace sur les volumes non utilisés&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker volume prune
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="bonnes-pratiques-pour-la-gestion-du-stockage"&gt;&lt;a href="#bonnes-pratiques-pour-la-gestion-du-stockage" class="header-anchor"&gt;&lt;/a&gt;Bonnes pratiques pour la gestion du stockage
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Utilisez des images légères&lt;/strong&gt; : Préférez les images basées sur Alpine quand c'est possible&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimisez vos Dockerfiles&lt;/strong&gt; :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Combinez les commandes RUN pour réduire le nombre de couches&lt;/li&gt;
&lt;li&gt;Nettoyez les caches de paquets dans la même instruction qui les installe&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-dockerfile" data-lang="dockerfile"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;RUN&lt;/span&gt; apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt install -y &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; package1 &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; package2 &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt clean &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm -rf /var/lib/apt/lists/*&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Utilisez .dockerignore&lt;/strong&gt; pour exclure les fichiers inutiles du contexte de build&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Surveillez régulièrement&lt;/strong&gt; l'espace disque utilisé par Docker avec &lt;code&gt;docker system df&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Configurez un cron job&lt;/strong&gt; pour nettoyer périodiquement les ressources inutilisées&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="conclusion"&gt;&lt;a href="#conclusion" class="header-anchor"&gt;&lt;/a&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;La gestion du stockage Docker ressemble parfois à un jeu de Tetris où les blocs seraient des gigaoctets - il faut savoir optimiser l'espace pour éviter le game over.&lt;/p&gt;
&lt;p&gt;En configurant correctement votre pilote de stockage et en adoptant de bonnes pratiques de nettoyage, vous pourrez éviter ce moment gênant où vous devez expliquer pourquoi le serveur de production s'est arrêté juste parce qu'il y avait trop d'images &amp;quot;hello-world&amp;quot; qui traînaient.&lt;/p&gt;
&lt;p&gt;Et souvenez-vous : dans un monde de conteneurs éphémères, les données persistantes méritent toujours une réflexion approfondie (et un bon volume Docker).&lt;/p&gt;</description></item></channel></rss>