Image Docker vs conteneur

Image Docker vs conteneur

Comprendre le processus que Docker utilise pour stocker des données via des images et des conteneurs vous aidera à mieux concevoir vos applications Docker. Les images Docker sont comme des modèles tandis que les conteneurs Docker sont les instances de course créées à partir de ces modèles. Docker utilise une approche en couches pour stocker des images et des conteneurs.

Images et couches

Une image Docker est créée à partir de plusieurs couches. Si nous prenons un exemple de dockerfile, chaque instruction est convertie en couche. Voici un simple dockerfile:

Du nœud: 6.9.2
Copier le serveur.js .
Serveur de nœuds CMD.js

Chaque ligne du dockerfile ci-dessus créera une couche. L'énoncé de la recherche recherchera le nœud: 6.9.2 Image dans le registre local. S'il ne le trouve pas là-bas, il le téléchargera à partir du Docker Hub. Alors docker créera la première couche. L'instruction de copie suivante ajoute le serveur.Fichier JS à l'image en deuxième couche. La dernière couche exécute un nœud.Application JS. Toutes ces couches sont empilées les unes sur les autres. Chaque couche supplémentaire est ajoutée comme une différence par rapport à la couche avant elle.


Conteneurs et couches

Les conteneurs sont créés à partir d'images. Lorsqu'un conteneur est créé à partir d'une image, une fine couche de lecture / écriture est placée sur l'image (notez que les calques d'image sont immuables, les couches de conteneur ne le sont pas). Toute modification apportée au conteneur est mise sur cette couche de lecture / écriture pendant la durée de vie du conteneur. Lorsqu'un conteneur est supprimé, la couche de lecture / écriture mince associée est supprimée. Cela signifie que plusieurs conteneurs peuvent partager la même image. Chaque couche de conteneur conservera ses propres données en toute sécurité au-dessus de l'image Docker.


Images et conteneurs

Essayons un exemple simple. Vous pouvez utiliser la commande docker images pour trouver toutes les images:

$ images docker
Taille de la balise du référentiel

Et la commande docker ps pour trouver des conteneurs:

$ docker ps
Commande d'image d'ID de conteneur Image Créé les noms de ports d'état

Ceci est une nouvelle installation de Docker. Il n'y a donc pas d'image ou de conteneur présent. Vous pouvez exécuter le nœud docker run -it: 6.9.2 commande pour démarrer un conteneur.

$ docker run -it nœud: 6.9.2
Impossible de trouver l'image nœud: 6.9.2 'localement
6.9.2: Tirer de la bibliothèque / nœud
75A822CD7888: Pull complet
57DE64C72267: Pull complet
4306be1e8943: Pull complet
871436AB7225: Pull complet
0110C26A367A: Pull complet
1F04FE713F1B: Pull complet
AC7C0B5FB553: Pull complet
Digest: Sha256: 2E95BE60FAF429D6C97D928C762CB36F1940F4456CE4BD33FBDC34DE94A5E043
Statut: Image plus récente téléchargée pour le nœud: 6.9.2
>

Maintenant, si nous vérifions à nouveau les images Docker, nous trouvons:

$ images docker
Taille de la balise du référentiel
Node 6.9.2 FAAADB4AAF9B il y a 11 mois 655 Mo

Et si nous vérifions le conteneur, nous trouvons:

$ docker ps
Commande d'image d'ID de conteneur Image Créé les noms de ports d'état
8C48C7E03BC7 NODE: 6.9.2 "Node" il y a 20 secondes en haut de 18 secondes Reverent_jackson

Si nous commençons un autre conteneur à partir de la même image en utilisant la commande:

$ docker run -it nœud: 6.9.2

Et vérifiez à nouveau, nous voyons:

$ images docker
Taille de la balise du référentiel
Node 6.9.2 FAAADB4AAF9B il y a 11 mois 655 Mo

Et

$ docker ps
Commande d'image d'ID de conteneur Image Créé les noms de ports d'état
96E6DB955276 NODE: 6.9.2 "nœud" il y a 24 secondes en haut de 23 secondes Cocky_dijkstra
8C48C7E03BC7 NODE: 6.9.2 "nœud" il y a 4 minutes en haut de 4 minutes Reverent_jackson

Les deux conteneurs avec ID de conteneur 96E6DB955276 et 8C48C7E03BC7 fonctionnent tous deux sur l'image Docker avec l'image ID FAAADB4AAF9B. Les minces couches de lecture / écriture des conteneurs Docker résident sur le dessus de la couche de l'image Docker.

Astuces:

Vous pouvez supprimer les conteneurs Docker avec la commande docker rm [id de conteneur] et supprimer les images docker avec la commande docker rmi [ID d'image].

Le nœud d'image: 6.9.2 Nous avons téléchargé à partir de Docker Hub est également créé en combinant plusieurs couches. Vous pouvez vérifier les calques d'images en utilisant l'historique Docker [ID d'image].

$ Docker History Faaadb4aaf9b
Image créée par la taille
faaadb4aaf9b il y a 11 mois / bin / sh -c # (nop) cmd ["nœud"] 0b
Il y a 11 mois / bin / sh -c curl -slo "https: // nodejs.org / d 42.5 Mo
Il y a 11 mois / bin / sh -c # (nop) env node_version = 6.9.2 0b
Il y a 11 mois / bin / sh -c # (nop) env npm_config_loglevel 0b
Il y a 11 mois / bin / sh -c set -ex && pour la clé dans 955 108KB
Il y a 11 mois / bin / sh -c groupadd --gid 1000 nœud && u 335KB
Il y a 11 mois / bin / sh -c apt-get update && apt-get insta 323Mb

Conclusion

Une façon populaire d'expliquer les images et les conteneurs est de comparer une image à une classe et un conteneur à l'instance de cette classe. L'approche en couches des images et des conteneurs Docker aide à maintenir la taille des images et des conteneurs petits.

Les références:

  • https: // docs.docker.com / moteur / userguide / storagedriver / images et contraintes / contraintes /
  • Image Docker vs conteneur
  • https: // stackOverflow.com / questions / 23735149 / docker-image-vs-container