Où sont stockés les images et les conteneurs Docker sur l'hôte ?

0
393

Docker utilise deux types de formats pour représenter les processus en cours d'exécution—images et conteneurs, et les deux stockent des données sur le lecteur de votre ordinateur. Nous parlerons des commandes fournies par Docker pour gérer les données et de la façon dont vous pouvez les utiliser pour accéder aux fichiers image et conteneur.

La différence entre Images et conteneurs

Les images sont ce que vous créez lorsque vous exécutez docker build ; ils sont stockés dans un registre de conteneurs comme le Docker Hub et contiennent tous les fichiers et le code pour exécuter une application. Vous pouvez les considérer comme des fichiers ISO pour un système d'exploitation de machine virtuelle.

Les conteneurs sont créés à partir d'images, et ils sont comme la véritable machine virtuelle qui exécute l'application. Vous pouvez avoir plusieurs conteneurs exécutés en parallèle sur la même image. Chaque conteneur aura son propre système de fichiers, éventuellement créé avec des “montages de volume” qui lient les données de l'hôte au conteneur.

Utilisation du stockage d'images Docker

Les images stockent l'intégralité du contenu de l'image sur votre disque. Chaque fois que vous extrayez une image d'Internet, elle est téléchargée et stockée, généralement pour toujours. Les images peuvent être très volumineuses, ce qui peut s'accumuler au fil du temps, en particulier pour les ordinateurs portables avec un stockage limité.

Si vous souhaitez accéder directement aux données d'image, elles sont généralement stockées aux emplacements suivants :

  • Linux : /var/lib/docker/
  • Windows : C:ProgramDataDockerDesktop
  • macOS : ~/Library/Containers/com.docker.docker/Data/vms/0/

Publicité

Cependant, toucher à ces données est probablement une mauvaise idée. Le stockage de Docker est compliqué et varie en fait énormément en fonction du pilote de stockage qu'il utilise. Linux utilise désormais par défaut overlay2 sur la plupart des distributions, ce qui n'est même pas accessible pour la plupart des utilisateurs finaux. Jouer avec cela peut entraîner une perte de données.

Au lieu de cela, Docker fournit des commandes gérées pour gérer les images. Vous pouvez afficher toutes les versions des images téléchargées avec une simple commande :

docker image ls

Heureusement, ce n'est pas aussi grave qu'il n'y paraît, car les images Docker stockent les versions de manière incrémentielle. Cela signifie que chaque fois que vous téléchargez une nouvelle version, elle ne remplace que les pièces qui ont été modifiées. Si vous utilisez fréquemment la même image à plusieurs reprises, vous n'accumulerez probablement pas trop de coûts de stockage.

Cependant, si vous utilisez beaucoup d'images différentes, vous pouvez enregistrer de nombreuses images qui ne sont même plus utilisées. Pour les nettoyer, Docker fournit une commande intégrée pour exécuter le ramasse-miettes. Cela supprimera toutes les images qui n'ont aucune référence, c'est-à-dire qui ne sont étiquetées ou référencées par aucun conteneur.

docker image prune

Pour supprimer toutes les anciennes images non utilisées par les conteneurs existants, exécutez-la avec l'indicateur -a :< /p> docker image prune -a

Cela couvre le cas d'utilisation principal, mais il y a quelques commandes plus utiles :

  • inspecter : affiche des informations sur une version de conteneur.
  • sauvegarder & load : enregistre et charge les images dans une archive tar.
  • rm : supprime une image directement.
  • pull/push : mises à jour à partir d'un registre distant.
  • historique : fournit un journal des modifications.

Travailler avec Docker Container Storage

Vous pouvez afficher toutes les informations sur un conteneur avec Docker inspect, qui affiche les pilotes et les données du système de fichiers, ainsi que tous les montages et volumes existants.

docker inspect containerID

Publicité

Les conteneurs stockent les données de deux manières. Le premier est le système de fichiers de base, qui est copié à partir de l'image et est unique à chaque conteneur. Docker utilise un “répertoire inférieur” et “répertoire supérieur,” qui sont des couches séparées qui sont fusionnées en un seul système de fichiers hybride. Le répertoire inférieur stocke les données de l'image de base et le répertoire supérieur stocke tout ce qui a été modifié lors de l'exécution, tels que les fichiers journaux. Dans les deux cas, le stockage de ceux-ci dépend du pilote de système de fichiers que Docker est configuré pour utiliser.

Ensuite, il existe des montages, qui lient les répertoires de l'hôte au conteneur, généralement gérés automatiquement avec une fonctionnalité Docker appelée tomes. Ceux-ci sont stockés normalement et sont accessibles aux utilisateurs finaux. Si vous effectuez un travail qui vous oblige à modifier des données sur des conteneurs en cours d'exécution, vous devriez probablement modifier un volume ou un montage de liaison.

Accès aux volumes

Les montages de liaison sont accessibles directement et constituent un excellent choix si vous souhaitez stocker la configuration utilisée pour de nombreux conteneurs ou stocker des données accessibles qui persistent lors des redémarrages du conteneur.

Si vous souhaitez modifier données stockées dans des volumes, vous pouvez le faire aussi. Ils sont stockés dans un format standard accessible depuis Linux :

/var/lib/docker/volumes/volumeID/_data

Vous pouvez obtenir l'ID de volume et des informations avec docker volume inspect.

Publicité

Tout comme les images, les volumes peuvent également devenir périmés. Vous pouvez les supprimer facilement, mais les sauvegarder et les transférer est un processus plus délicat.

docker volume prune docker volume rm volumeID

Modification du système de fichiers d'un conteneur Docker

Si vous le souhaitez pour modifier le système de fichiers du conteneur, tout comme les images, c'est une mauvaise idée. Dans la plupart des cas, vous devez créer une nouvelle version du conteneur avec les modifications mises à jour et déployer une mise à jour.

Cependant, si vous souhaitez apporter des modifications rapides sans arrêter le conteneur, le meilleur moyen consiste simplement à ouvrir un shell bash à l'intérieur du conteneur et à le modifier via Docker. Pour ce faire, c'est très simple d'exécuter docker exec sur le conteneur et de passer “bash” comme commande :

docker exec -it container bash

À partir de là, vous êtes libre d'utiliser les commandes Linux normales. Si vous souhaitez le faire à distance, vous pouvez installer un serveur SSH dans votre conteneur et lier le port 22 à un autre port sur l'hôte.

CONNEXION : Comment faire SSH dans un conteneur Docker