Comment utiliser plusieurs contextes de construction Docker pour rationaliser l'assemblage d'images
Agence web » Actualités du digital » Comment stocker des images et des conteneurs Docker sur un lecteur externe

Comment stocker des images et des conteneurs Docker sur un lecteur externe

Docker stocke les images téléchargées, les conteneurs en cours d’exécution et les données de volume persistant dans une seule racine de répertoire partagé sur votre lecteur système. Vous pouvez personnaliser votre configuration pour utiliser un lecteur externe, un partage réseau ou un deuxième disque interne si vous avez besoin d’ajouter du stockage à votre installation.

Préparation

La partie principale de ce guide s’applique à Docker Engine pour Linux et Docker Desktop sous Windows et Mac. Vous devrez trouver votre Docker daemon.json fichier sur les trois plates-formes. Ce sera dans l’un des endroits suivants :

  • /etc/docker/daemon.json sur Linux.
  • %programdata%dockerconfigdaemon.json sur Windows.
  • ~/Library/Containers/com.docker.docker/Data/database/com.docker.driver.amd64-linux/etc/docker/daemon.json sur Mac.

Docker conseille aux utilisateurs Windows et Mac de mettre à jour le fichier de configuration via l’interface utilisateur, au lieu d’appliquer manuellement les modifications dans un éditeur de texte. Vous pouvez accéder à l’écran des paramètres en vous rendant dans Préférences > Docker Engine > Modifier le fichier dans l’interface Docker Desktop.

Modification de votre répertoire de données

L’emplacement du répertoire de données de Docker est contrôlé par le data-root réglage dans votre fichier de configuration. Anciennes versions de Docker publiées avant 17.06 utilisées graph Au lieu. Vous pouvez vérifier la version que vous avez en exécutant le docker version commande.

$ docker version
...
Server: Docker Engine - Community
  Engine:
    Version: 20.10.17

Recherchez ou ajoutez la clé appropriée dans le fichier de configuration. Définissez le chemin de répertoire souhaité comme valeur. Voici un exemple Linux qui stockera les données Docker sur un lecteur externe monté dans le système de fichiers :

{
    "data-root": "/mnt/docker-data"
}

Vous devez redémarrer le démon Docker après avoir effectué la modification :

$ sudo service docker restart

Docker Desktop peut être redémarré sur Windows et Mac en le quittant puis en lançant une nouvelle instance.

Vous devez copier le contenu de votre répertoire de données actuel dans le nouveau chemin si vous souhaitez conserver votre contenu existant. Sinon, vous commencerez avec une table rase, incapable d’accéder aux conteneurs et aux images précédemment créés.

$ sudo rsync -aSv /var/lib/docker/ /mnt/docker-data

Modification du répertoire de données sans redémarrage

Vous pouvez déplacer votre répertoire de données sans redémarrer le démon en créant un lien symbolique depuis /var/lib/docker à votre nouvel emplacement. Cela peut être utile si vous manquez d’espace sur un hôte où un redémarrage non planifié du service Docker n’est pas une option viable.

Copiez vos données Docker existantes dans votre nouveau répertoire :

$ sudo rsync -aSv /var/lib/docker/ /mnt/docker-data

Créez ensuite un lien symbolique qui résout /var/lib/docker à l’emplacement cible :

$ sudo ln -s /mnt/docker-data/ /var/lib/docker

N’utilisez pas cette technique pour les charges de travail qui modifient rapidement les données du système de fichiers. Il existe un risque d’incohérences si des données sont écrites entre la copie du répertoire existant et la création du lien symbolique.

Qu’est-ce qui change réellement ?

La modification du répertoire racine de Docker affecte tous les différents types de données que le démon stocke. Cela inclut vos images, conteneurs, plugins installés, configuration Swarm et volumes, ainsi que le cache de construction Docker.

La modification du chemin écrira toutes ces données dans votre nouvel emplacement. Vous ne pouvez pas déplacer de manière sélective des types spécifiques vers des points de montage distincts. Cela signifie qu’il est important de sélectionner un emplacement de stockage qui offrira de bonnes performances globales. L’utilisation d’un disque dur externe lent peut nuire à la réactivité de docker Opérations CLI, même si cela conviendrait à certains types de données comme le stockage d’images à long terme.

En l’absence de prise en charge des chemins de données par type, l’élagage des ressources inutilisées peut être un meilleur moyen de gérer les exigences de stockage de Docker. Au lieu d’allouer plus d’espace à Docker, nettoyez les actifs redondants et transférez les images inutilisées vers un registre central séparé. Cela peut libérer un espace considérable sur votre hôte.

Utilisation unique d’un répertoire de données différent

Vous pouvez démarrer manuellement Docker Engine avec un répertoire de données spécifique en transmettant le --data-root drapeau lorsque vous démarrez le démon. Cela peut être utilisé pour basculer entre les répertoires de données ou exécuter une instance propre sans vos données existantes.

$ sudo /usr/bin/dockerd --data-root /mnt/docker-data

L’indicateur remplacera le chemin du répertoire spécifié par le daemon.json dossier. Le répertoire configuré restera intact afin que vous puissiez revenir à cette instance à l’avenir.

Sommaire

Docker stocke toutes ses données, y compris les images construites et extraites, les conteneurs créés et les volumes dans une seule arborescence de répertoires. La racine est généralement /var/lib/docker mais vous pouvez le personnaliser en ajoutant un paramètre à votre fichier de configuration ou en fournissant le --data-root drapeau lorsque vous démarrez le démon.

La modification du répertoire de données signifie que vos données existantes n’apparaîtront pas dans Docker à moins que vous ne les copiez dans le nouveau chemin. Vous pouvez utiliser cette fonctionnalité pour gérer plusieurs référentiels de stockage Docker indépendants, tels qu’un pour les projets personnels et un autre pour le travail. Vous devrez cependant redémarrer le démon avant de changer de contexte, car une seule instance peut s’exécuter simultanément.

★★★★★