GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

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

Docker utilise deux types de formats pour représenter les processus en cours d'exécution :les images et les 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 manière dont vous pouvez les utiliser pour accéder aux fichiers d'image et de conteneur.

La différence entre les images et les 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 machine virtuelle réelle 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.

Travailler avec le stockage d'images Docker

Les images stockent tout le 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 avec le temps, en particulier pour les ordinateurs portables disposant d'un espace de 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/

Cependant, toucher à ces données est probablement une mauvaise idée . Le stockage de Docker est compliqué et varie énormément en fonction du pilote de stockage utilisé. Linux utilise désormais par défaut overlay2 sur la plupart des distributions, 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 encore et encore, vous n'augmenterez probablement pas trop les coûts de stockage.

Cependant, si vous utilisez beaucoup d'images différentes, vous pourriez avoir de nombreuses images enregistrées qui ne sont même plus utilisées. Pour les nettoyer, Docker fournit une commande intégrée pour exécuter la récupération de place. Cela supprimera toutes les images qui n'ont pas de références, c'est-à-dire qui ne sont pas taguées ou référencées par aucun conteneur.

docker image prune

Pour élaguer toutes les anciennes images non utilisées par les conteneurs existants, exécutez-la avec le -a drapeau :

docker image prune -a

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

  • inspect  :affiche des informations sur une version de conteneur.
  • save & load  :enregistre et charge les images dans un tar archiver.
  • rm :supprime directement une image.
  • pull/push :mises à jour depuis un registre distant.
  • history  :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

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 pour chaque conteneur. Docker utilise un «répertoire inférieur» et un «répertoire supérieur», qui sont des couches distinctes qui sont fusionnées en un seul système de fichiers hybride. Le répertoire inférieur stocke les données d'image de base et le répertoire supérieur stocke tout ce qui a été modifié lors de l'exécution, comme les fichiers journaux. Dans les deux cas, leur stockage dépend du pilote de système de fichiers que Docker est configuré pour utiliser.

Ensuite, il y a 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 volumes. 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éder aux volumes

Les montages liés 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 de conteneurs.

Si vous souhaitez modifier des données stockées dans des volumes, vous pouvez également le faire. 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 les informations avec docker volume inspect .

Tout comme les images, les volumes peuvent également devenir obsolètes. 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 souhaitez modifier le système de fichiers du conteneur, un peu 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. C'est très simple :lancez docker exec sur le conteneur, et passez "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.

CONNEXE : Comment se connecter en SSH à un conteneur Docker


Docker
  1. Héberger plusieurs sites Web sur des conteneurs Docker

  2. Où sont stockés les fichiers de traduction ?

  3. Comment utiliser les images Docker, les conteneurs et les Dockerfiles en profondeur

  4. Comment faire fonctionner les conteneurs Docker lorsque le démon s'arrête

  5. Docker :les liens Docker sont-ils obsolètes ?

Comment analyser et explorer le contenu des images Docker

Comment obtenir l'adresse IP d'un conteneur Docker à partir de l'hôte

Comment mettre à jour les images Docker vers la dernière version

Travailler avec des images Docker à partir de la ligne de commande

Utilisation des conteneurs Docker à partir de la ligne de commande

Guide du débutant sur le monde Docker