web-dev-qa-db-fra.com

Dans Docker, quelle est la différence entre un conteneur et une image?

Quelle est la différence entre un conteneur et une image dans Docker? Dans le didacticiel Démarrer avec Docker , ces termes sont tous les deux utilisés, mais je ne comprends pas la différence.

Quelqu'un peut-il s'il vous plaît faire la lumière?

252
Golo Roden

Les images sont des instantanés immuables figés de conteneurs vivants. Les conteneurs exécutent (ou ont arrêté) les occurrences d'une image.

Commencez avec l'image de base appelée «Ubuntu». Exécutons bash de manière interactive dans l'image Ubuntu et créons un fichier. Nous utiliserons les drapeaux -i et -t pour nous donner un shell bash interactif.

$ docker run -i -t ubuntu  /bin/bash
root@48cff2e9be75:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@48cff2e9be75:/# cat > foo
This is a really important file!!!!
root@48cff2e9be75:/# exit

Ne vous attendez pas à ce que ce fichier reste en place lorsque vous quittez et redémarrez l'image. Vous redémarrez avec exactement le même état défini que celui que vous aviez commencé auparavant, pas là où vous l'avez laissé.

$ docker run -i -t ubuntu  /bin/bash
root@abf181be4379:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@abf181be4379:/# exit

Mais, le conteneur, qui ne fonctionne plus, a un état et peut être enregistré (engagé) dans une image.

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                          PORTS                      NAMES
abf181be4379        ubuntu:14.04        /bin/bash              17 seconds ago       Exited (0) 12 seconds ago                                  elegant_ardinghelli    
48cff2e9be75        ubuntu:14.04        /bin/bash              About a minute ago   Exited (0) 50 seconds ago                                  determined_pare        
...

Créons une image à partir du conteneur ID 48cff2e9be75 où nous avons créé notre fichier:

$ docker commit 48cff2e9be75 ubuntu-foo
d0e4ae9a911d0243e95556e229c8e0873b623eeed4c7816268db090dfdd149c2

Maintenant, nous avons une nouvelle image avec notre fichier vraiment important:

$ docker run ubuntu-foo /bin/cat foo
This is a really important file!!!!

Essayez la commande docker images. Vous devriez voir votre nouvelle image ubuntu-foo dans la liste avec l'image standard ubuntu avec laquelle nous avons commencé.

240
cbare

Une image est une collection ordonnée de modifications du système de fichiers racine et des paramètres d'exécution correspondants à utiliser dans un environnement d'exécution de conteneur. Les images sont en lecture seule.

Un conteneur est une instanciation dynamique d'une image, active (ou inactive si elle est abandonnée).

156
johncosta

En utilisant une analogie de programmation orientée objet, la différence entre une image Docker et un conteneur Docker est identique à celle de la différence entre une classe et un objet. Un objet est l'instance d'exécution d'une classe. De même, un conteneur est l'instance d'exécution d'une image.

Un objet est créé une seule fois lorsqu'il est instancié. De même, un conteneur peut être en cours d'exécution ou arrêté. Les conteneurs sont créés à partir d'une image, bien que cela ne soit pas toujours le cas. L'exemple suivant crée une image de serveur Apache, exécute l'image, répertorie les images, puis répertorie les conteneurs:

  1. Créez un fichier Docker avec le contenu suivant:

    FROM httpd:2.4
    
  2. Installer le serveur Apache

    Sudo docker build -t my-Apache2 .
    
  3. Exécuter l'image

    Sudo docker run -it --rm --name my-running-app my-Apache2
    
  4. Liste des images de Docker

    Sudo docker images
    
  5. Répertoriez les conteneurs Docker en cours d'exécution

    docker ps
    
  6. Lister tous les conteneurs

    docker ps -a
    
  7. Liste les derniers conteneurs créés

    docker ps -l
    
56

Dans des mots faciles.

Images -

Le système de fichiers et l'application de configuration (en lecture seule) utilisés pour créer des conteneurs.Plus de détails .

Conteneurs -

Ce sont des instances en cours d'images Docker. Les conteneurs exécutent la réelle applications. Un conteneur comprend une application et l'ensemble de ses dépendances. Il partage le noyau avec d'autres conteneurs et s'exécute en tant que un processus isolé dans l'espace utilisateur sur le système d'exploitation hôte.Plus de détails .


Autres termes importants à noter:


Démon Docker -

Le service d'arrière-plan exécuté sur l'hôte qui gère le bâtiment, exécuter et distribuer les conteneurs Docker.

Client Docker -

Outil de ligne de commande permettant à l’utilisateur d’interagir avec Docker démon.

Docker Store -

Store est, entre autres, un registre d’images Docker. Vous pouvez pensez au registre comme à un répertoire de toutes les images Docker disponibles.

Une image vaut mieux que mille mots.

 Enter image description here

(Pour une compréhension plus approfondie, veuillez lire this .)

Résumé:

  • Tirez image du hub Docker ou construisez-le à partir d'un fichier Docker => Donne une image Docker (non modifiable).
  • Exécuter l’image (docker run image_name:tag_name) => Donne une image en cours d’exécution (modifiable)
33
Imran

Une image est fondamentalement un modèle immuable pour la création d'un conteneur. Il est plus facile de comprendre la différence entre une image et un conteneur en considérant ce qu’il advient d’une image pour la transformer en conteneur.

Le moteur Docker prend l'image et ajoute un système de fichiers en lecture/écriture sur le dessus, puis initialise divers paramètres. Ces paramètres incluent les options réseau (IP, port, etc.), le nom, l'ID et toute limite de ressources (CPU, mémoire). Si le moteur Docker a été invité à exécuter le conteneur, il initialisera également un processus à l'intérieur de celui-ci. Un conteneur peut être arrêté et redémarré, auquel cas il conservera tous les paramètres et les modifications du système de fichiers (mais perdra tout ce qui est en mémoire et tous les processus seront redémarrés). Pour cette raison, un conteneur arrêté ou quitté est pas identique à une image. 

14
Adrian Mouat

Images [comme vm]

  • Modèle en lecture seule utilisé pour créer des conteneurs
  • Construit par vous ou d'autres utilisateurs de Docker
  • Stocké dans le hub Docker ou dans votre registre local

Conteneurs [comme une machine à rouler]

  • Plateforme d'application isolée
  • Contient tout le nécessaire pour exécuter votre application
  • Basé sur des images

images link to show what is a container

6
Yang Yu

DockerFile - (Construction) -> DockerImage - (exécution) -> DockerContainer  

DockerFileest ce que vous ou le développeur écrivez du code pour faire quelque chose (ex-Install)

Image de menu fixeest-ce que vous obtenez lorsque vous créez un fichier de menu fixe.

Docker ContainerEst-ce que vous obtenez lorsque vous exécutez votre image Docker

Nous pouvons obtenir Docker Image du docker hub en le tirant puis en l'exécutant pour obtenir un conteneur. 

3
Divyanshu mehta

Dans Docker, tout commence par une image. Une image est chaque fichier qui constitue juste assez du système d'exploitation pour faire ce que vous devez faire. Traditionnellement, vous installeriez un système d'exploitation complet avec tout pour chaque application que vous exécutez. Avec Docker, vous associez le tout pour disposer d’un petit conteneur avec juste assez de système d’exploitation pour faire ce que vous devez faire, et vous pouvez en avoir beaucoup, efficacement, sur un ordinateur. 

Utilisez docker images pour voir les images installées et docker ps pour voir les images en cours. Lorsque vous tapez docker run, il prend l'image et en fait un conteneur vivant avec un processus en cours d'exécution. J'ai tendance à utiliser:

docker run -ti <image>:<tag> bash 

Enfin, les images ont leur propre ensemble d'identifiants et les conteneurs ont leur propre ensemble d'identifiants - ils ne se chevauchent pas. 

2
jimseeve

Les conteneurs sont basés sur des images. Une image doit être transmise à la commande d'exécution de Dockers.

Exemple:

BusyBox image

http://i.stack.imgur.com/eK9dC.png

Ici, nous spécifions une image appelée busybox. Docker n'a pas cette image localement et la extrait d'un registre public.

Un registre est un catalogue d'images Docker avec lequel le client Docker peut communiquer et télécharger une image. Une fois l'image extraite, Docker démarre un conteneur et exécute la commande echo hello world.

2
Rakesh Kumar

Images : Le système de fichiers et les métadonnées nécessaires à l'exécution des conteneurs. Ils peuvent être considérés comme un format de package d'application comprenant toutes les dépendances permettant d'exécuter l'application et les paramètres par défaut permettant d'exécuter cette application. Les métadonnées incluent les valeurs par défaut pour la commande à exécuter, les variables d'environnement, les étiquettes et la commande healthcheck.

Containers : Une instance d'une application isolée. Un conteneur a besoin de l'image pour définir son état initial et utilise le système de fichiers en lecture seule de l'image avec un système de fichiers en lecture-écriture spécifique au conteneur. Un conteneur en cours d'exécution est un wrapper autour d'un processus en cours d'exécution, lui donnant des espaces de noms pour des éléments tels que le système de fichiers, le réseau et les PID.

Lorsque vous exécutez une commande docker run, vous fournissez une image sur la ligne de commande, ainsi que toutes les configurations, et docker renvoie un conteneur basé sur la définition de l'image et les configurations que vous avez fournies.


Références : pour le moteur de menu fixe, une image est simplement un identifiant d'image. C'est un hash unique et immuable. Une modification d'une image entraîne la création d'un nouvel identifiant d'image. Cependant, vous pouvez avoir une ou plusieurs références pointant vers un identifiant d'image, ce qui n'est pas sans rappeler les liens symboliques. Et ces références peuvent être mises à jour pour pointer vers de nouveaux identifiants d'image. Notez que lorsque vous créez un conteneur, docker résoudra cette référence au moment de la création du conteneur, vous ne pourrez donc pas mettre à jour l'image d'un conteneur en cours d'exécution. Au lieu de cela, vous créez une nouvelle image et créez un nouveau conteneur basé sur cette nouvelle image.

Couches : En creusant un peu plus loin, vous avez des couches de système de fichiers. Docker assemble les images avec un système de fichiers en couches. Chaque couche est un ensemble de modifications en lecture seule du système de fichiers, et cette couche est représentée par un hachage unique. En utilisant ces couches en lecture seule, plusieurs images peuvent en étendre une autre et seules les différences entre ces images doivent être stockées ou transmises sur le réseau. Lorsqu'un conteneur Docker est exécuté, il reçoit une couche de système de fichiers en lecture-écriture spécifique au conteneur, unique dans ce conteneur, et toutes les couches d'image sont assemblées à l'aide d'un système de fichiers union. Une lecture est traitée à travers chaque couche jusqu'à ce que le fichier soit trouvé, une suppression trouvée ou le fichier introuvable dans la couche inférieure. Une écriture effectue une copie sur écriture de la couche en lecture seule de l'image vers la couche en lecture-écriture spécifique au conteneur. Et une suppression est enregistrée en tant que modification de la couche lecture-écriture spécifique au conteneur. Une étape courante dans la construction d’images consiste à exécuter une commande dans un conteneur temporaire en fonction de l’état précédent du système de fichiers image et à enregistrer le calque résultant du conteneur en tant que calque dans la nouvelle image.

1
BMitch

La différence officielle est que le conteneur est la dernière couche accessible en écriture, alors que les couches ci-dessous sont uniquement lisibles et appartiennent à votre image. La différence intuitive est que l'instance de docker est l'instance virtualisée par votre démon de docker et que l'exécution de votre image s'exécute dans une section isolée de votre noyau (ce processus vous est caché). L'image est cependant statique, elle ne s'exécute pas, c'est juste une pile de calques (fichiers statiques). Si nous associons ce paradigme à la programmation orientée objet, l’image correspond à la définition de votre classe, alors que votre instance de menu fixe correspond à l’objet engendré par votre classe et résidant en mémoire.

J'ai écrit un tutoriel pour renforcer votre intuition de connaissance de docker:

http://javagoogleappspot.blogspot.com/2018/07/docker-basics.html

0
the dude

Docker Images: Il contient une liste de commandes et d'instructions sur la manière de créer et d'exécuter un conteneur. Donc, fondamentalement, Images contient toutes les données et métadonnées nécessaires pour déclencher un conteneur (également appelé plan directeur). Nous ne pouvons pas traiter un conteneur sans spécifier Images.

$docker images centos

Répertoriez toutes les versions disponibles de centos.

Docker Container: Les conteneurs sont un déjeuner d’images, nous pouvons donc dire que conteneur est l’instance en cours d’exécution d’une Image. Container est une construction d'exécution, contrairement à Images qui est une construction temporelle. 

0
PGOEL