Cet article vous apporte des connaissances pertinentes sur la superposition de fichiers Docker. Cet article utilise un exemple de conteneur Docker pour décrire certains principes de la superposition de fichiers Docker. J'espère qu'il sera utile à tout le monde.
Vous pouvez obtenir l'état de superposition du système de fichiers de chaque conteneur à partir de docker inspect [container-id] --format={{.GraphDriver}}
{map[LowerDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b-init/diff:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/diff MergedDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b/merged UpperDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b/diff WorkDir:/var/lib/docker/overlay2/52f456f455215e56b77087495a5d35323fbf1c0e0391f45349f386006c75865b/work] overlay2}
Il existe principalement quatre types
Cela signifie que tous les conteneurs basés sur cette image pointeront vers le même système de fichiers, qui est la couche d'image. Tous les conteneurs utiliseront cette couche.
Alors, d'où vient cette couche ? Nous pouvons jeter un œil à l'image que nous utilisons
Il s'agit d'un conteneur différent qui combine la couche inférieure et la couche supérieure pour fournir le système de fichiers final dans le conteneur
Il s'agit d'enregistrer les opérations de différents conteneurs, puis grâce à la comparaison de la couche inférieure, une couche de fusion peut être générée
Pas encore compris en profondeur
docker run -d alpine:latest
docker inspect alpine --format={{.GraphDriver}}
{map[MergedDir:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/merged UpperDir:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/diff WorkDir:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/work] overlay2}
Notez qu'UpperDir est la couche supérieure de l'image, c'est-à-dire que nous pouvons apporter des modifications à ce niveau, ce qui affectera le conteneur créé plus tard
docker inspect 9a118484ba --format={{.GraphDriver}}
{map[LowerDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14-init/diff:/var/lib/docker/overlay2/e4b90240aa77212dde6499a49c421d26977ed9fe8a1f6fcbaaaf77d85c67654e/diff MergedDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14/merged UpperDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14/diff WorkDir:/var/lib/docker/overlay2/3d3f32727c4f7867d43c1e61d635ac0ed22e95ff39c66240166dd6614b81fe14/work] overlay2}
Vous peut voir la couche inférieure du conteneur, c'est-à-dire dans la couche supérieure de l'image, les modifications que nous apportons au conteneur seront reflétées dans la couche supérieure et la couche fusionnée sera organisée et affichée dans le conteneur.
Nous pouvons utiliser la ligne de commande pour vérifier les modifications dans le système de fichiers du conteneur
docker diff 9a118484ba
Comme nous n'avons pas utilisé le conteneur, il n'y a plus de différence entre le conteneur et l'image maintenant
Nous démarrons un autre conteneur et le laissons dormir pendant 300 secondes. Allez ensuite dans le conteneur pour modifier certaines informations du fichier
# docker exec -it ca91bb /bin/sh / # echo "helloWorld" > /tmp/hello.txt
Vérifiez les modifications dans le système de fichiers du conteneur
docker diff ca91bbffb801 C /root C /root/.ash_history C /tmp A /tmp/hello.txt
Vous pouvez voir que ces modifications que nous avons apportées au système de fichiers ont été enregistrées
Ces contenus sont en fait dans le répertoire d'UpperDir
tree -L 1 diff/ diff/ ├── root └── tmp2 directories, 0 files
D'après les expériences ci-dessus, nous pouvons savoir que la couche supérieure est le contenu ajouté, qui se reflète dans les modifications du conteneur en fusionnant avec la couche inférieure. Alors peut-on modifier directement la couche supérieure pour faire fonctionner le conteneur ?
Nous ajoutons un répertoire demo dans le répertoire où se trouve upper et touchons un fichier dedans
# tree -L 2 ./ ./ ├── demo │ └── mytest.log ├── root └── tmp └── hello.txt
Voyons si nous pouvons voir le fichier que nous avons créé à partir du conteneur
/demo # pwd /demo /demo # ls mytest.log
Vous pouvez voir qu'il a pris effet, donc , si on veut initialiser ce conteneur, on peut directement supprimer tout le contenu de la couche supérieure.
Trouver des traces d'installation de logiciels
Au cours de projets précédents, les clients avaient toujours besoin de nous pour fournir le contenu que notre logiciel agent modifierait, mais nous n'avons jamais trouvé de meilleur moyen de le fournir aux clients. Grâce à l'application de ce fichier docker layered, nous pouvons déployer l'agent sur un conteneur, et nous pouvons alors découvrir clairement en un coup d'œil quels répertoires et fichiers le logiciel va modifier.
Restaurez rapidement le conteneur
Interagissez rapidement avec le système de fichiers du conteneur
Protégez le système de fichiers sous-jacent contre les dommages
Enregistrez l'espace hôte
Apprentissage recommandé : "Tutoriel vidéo Docker 》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!