Aller au contenu principal

2.03 Docker en pratique Les strates du système de fichier

Objectifs pédagogiques

  • Connaître l'histoire qui mène à ce système de couche
  • Comprendre les avantages et inconvénients de ce système

Les layers et la mise en cache

  • Docker construit les images comme une série de "couches" de fichiers successives.

  • On parle d'Union Filesystem car chaque couche (de fichiers) écrase la précédente.


Les avantages et les inconvénients


Avantages

Ce système économise de la place.

Pour simplifier, chaque instruction du Dockerfile crée une nouvelle couche.

Si une couche est déjà utilisée, elle est mise en cache et ne nécessite pas qu'on la regénère à chaque fois.

Au lancement d'un container, le Docker Engine rajoute une nouvelle couche de filesystem "normal" read/write par dessus la pile des couches de l'image.

Ce système est au coeur de l'immutabilité des images Docker.

On ne peut pas modifier une image "dans le fond", c'est toujours le niveau "de surface" qu'on peut modifier.


Désavantages

Ce système complexifie la compréhension et toute opération d'introspection

Pas facile de comprendre ce qui se passe et d'aller regarder où se trouve tel fichier.

Les implémentations de système de fichiers précédentes étaient défaillantes.

Il n'était pas rare que le FS dérape et que le conteneur crash pour cette raison.


Les strates en pratique : lancement de conteneurs

La commande inspect affiche de nombreuses informations sur un conteneur en exécution, dont les éléments de son "layercake".

$ docker inspect <container_id_or_name>
...
"LowerDir": "/var/lib/docker/overlay2/fb94ce5c9b652d1cee5e372e76dd011cb3993d45d6c91f6c5de4d59d33afb9c2-init/diff:/var/lib/docker/overlay2/ab0fd7ce9f469a3a7f6293fde706d7028a45d5ac377224ede0a65af133385149/diff:/var/lib/docker/overlay2/21f47d9ce63dba375dc372c6bd3ad7dabb0219dccb3174d4201cbe049de1234d/diff:/var/lib/docker/overlay2/51fc7c14a3d976ef7d13b9373c902f1d7ce08cdce6f96a493aa74ac98664f773/diff:/var/lib/docker/overlay2/01a6a79a4b75eddd63b52f5a93a67345caaf62313fe081a8e3ea57b2c315a598/diff:/var/lib/docker/overlay2/40070b4000942701b6a9df6537c89ee50d7bf4777615f80d17cd6b476c70ec96/diff:/var/lib/docker/overlay2/82a250b1fb6486d14b1de2c9787d2569f4204108639adfc801a82845863a314d/diff:/var/lib/docker/overlay2/48ba460a8f37e832fda1f53eee0d084dc7fd6402aa430d567be477cc49e66ffe/diff",
"MergedDir": "/var/lib/docker/overlay2/fb94ce5c9b652d1cee5e372e76dd011cb3993d45d6c91f6c5de4d59d33afb9c2/merged",
"UpperDir": "/var/lib/docker/overlay2/fb94ce5c9b652d1cee5e372e76dd011cb3993d45d6c91f6c5de4d59d33afb9c2/diff",
"WorkDir": "/var/lib/docker/overlay2/fb94ce5c9b652d1cee5e372e76dd011cb3993d45d6c91f6c5de4d59d33afb9c2/work"