Différence entre les images Docker et les conteneurs

1. Vue d'ensemble

Docker est un outil pour créer, déployer et exécuter facilement des applications. Cela nous permet de conditionner nos applications avec toutes les dépendances et de les distribuer sous forme de bundles individuels. Docker garantit que notre application fonctionnera de la même manière sur chaque instance de Docker.

Lorsque nous commençons à utiliser Docker, il y a deux concepts principaux sur lesquels nous devons être clairs: les images et les conteneurs .

Dans ce didacticiel, nous allons découvrir ce qu'ils sont et en quoi ils diffèrent.

2. Images Docker

Une image est un fichier qui représente une application packagée avec toutes les dépendances nécessaires pour s'exécuter correctement. En d'autres termes, nous pourrions dire qu'une image Docker est comme une classe Java .

Les images sont construites comme une série de couches . Les couches sont assemblées les unes sur les autres. Alors, qu'est-ce qu'une couche? En termes simples, un calque est une image.

Disons que nous voulons créer une image Docker d'une application Java Hello World. La première chose à laquelle nous devons réfléchir est de savoir ce dont notre application a besoin.

Pour commencer, c'est une application Java, nous aurons donc besoin d'une JVM. OK, cela semble facile, mais de quoi une machine virtuelle Java a-t-elle besoin pour fonctionner? Il a besoin d'un système d'exploitation. Par conséquent, notre image Docker aura une couche de système d'exploitation, une JVM et notre application Hello World .

Un avantage majeur de Docker est sa grande communauté. Si nous voulons construire sur une image, nous pouvons aller sur Docker Hub et rechercher si l'image dont nous avons besoin est disponible.

Disons que nous voulons créer une base de données, en utilisant la base de données PostgreSQL. Nous n'avons pas besoin de créer une nouvelle image PostgreSQL à partir de zéro. Nous allons simplement dans Docker Hub, recherchons postgres , qui est le nom officiel de l'image Docker pour PostgresSQL, choisissons la version dont nous avons besoin et l'exécutons.

Chaque image que nous créons ou extrayons de Docker Hub est stockée dans notre système de fichiers et est identifiée par son nom et son étiquette. Il peut également être identifié par son identifiant d'image .

En utilisant la commande docker images , nous pouvons afficher une liste d'images disponibles dans notre système de fichiers:

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE postgres 11.6 d3d96b1e5d48 4 weeks ago 332MB mongo latest 9979235fc504 6 weeks ago 364MB rabbitmq 3-management 44c4867e4a8b 8 weeks ago 180MB mysql 8.0.18 d435eee2caa5 2 months ago 456MB jboss/wildfly 18.0.1.Final bfc71fe5d7d1 2 months ago 757MB flyway/flyway 6.0.8 0c11020ffd69 3 months ago 247MB java 8-jre e44d62cf8862 3 years ago 311MB

3. Exécution des images Docker

Une image est exécutée à l'aide de la commande docker run avec le nom et la balise de l'image. Disons que nous voulons exécuter l'image postgres 11.6:

docker run -d postgres:11.6

Notez que nous avons fourni l' option -d . Cela indique à Docker d'exécuter l'image en arrière-plan - également connu sous le nom de mode détaché.

En utilisant la commande docker ps, nous pouvons vérifier si notre image est en cours d'exécution, nous devons utiliser cette commande:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3376143f0991 postgres:11.6 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 5432/tcp tender_heyrovsky

Notez l' ID DU CONTAINER dans la sortie ci-dessus. Jetons un coup d'œil à ce qu'est un conteneur et comment il est lié à une image.

4. Conteneurs Docker

Un conteneur est une instance d'une image. Chaque conteneur peut être identifié par son identifiant. En revenant à notre analogie de développement Java, nous pourrions dire qu'un conteneur est comme une instance d'une classe .

Docker définit sept états pour un conteneur: créé , redémarré , exécuté , supprimé , mis en pause , quitté et mort . Ceci est important à savoir. Puisqu'un conteneur n'est qu'une instance de l'image, il n'a pas besoin d'être en cours d'exécution.

Maintenant, repensons à la commande run que nous avons vue ci-dessus. Nous avons dit qu'il était utilisé pour exécuter des images, mais ce n'est pas tout à fait exact. La vérité est que la commande run est utilisée pour créer et démarrer un nouveau conteneur de l'image.

Un gros avantage est que les conteneurs sont comme des machines virtuelles légères. Leurs comportements sont complètement isolés les uns des autres. Cela signifie que nous pouvons exécuter plusieurs conteneurs de la même image, chacun étant dans un état différent avec des données et des ID différents.

Être capable d'exécuter plusieurs conteneurs de la même image en même temps est un grand avantage car cela nous permet de faire évoluer facilement les applications. Par exemple, pensons aux microservices. Si chaque service est conditionné en tant qu'image Docker, cela signifie que de nouveaux services peuvent être déployés en tant que conteneurs à la demande.

5. Cycle de vie des conteneurs

Plus tôt, nous avons mentionné les sept états d'un conteneur, voyons maintenant comment nous pouvons utiliser l' outil de ligne de commande docker pour traiter les différents états du cycle de vie.

Le démarrage d'un nouveau conteneur nous oblige à le créer puis à le démarrer . Cela signifie qu'il doit passer par l'état de création avant de pouvoir s'exécuter. Nous pouvons le faire en créant et en démarrant le conteneur explicitement:

docker container create : docker container start 

Ou nous pouvons facilement le faire avec la commande run :

docker run :

Nous pouvons suspendre un conteneur en cours d'exécution, puis le remettre en état d'exécution:

docker pause  docker unpause 

Un conteneur en pause affichera "Paused" comme statut lorsque nous vérifions les processus:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9bef2edcad7b postgres:11.6 "docker-entrypoint.s…" 5 minutes ago Up 4 minutes (Paused) 5432/tcp tender_heyrovsky

Nous pouvons également arrêter un conteneur en cours d'exécution, puis le réexécuter:

docker stop  docker start 

Et enfin, nous pouvons supprimer un conteneur:

docker container rm 

Seuls les conteneurs à l'état arrêté ou créé peuvent être supprimés.

Pour plus d'informations sur les commandes Docker, nous pouvons nous référer à la référence de la ligne de commande Docker.

6. Conclusion

Dans cet article, nous avons discuté des images et des conteneurs Docker et de leurs différences. Les images décrivent les applications et comment elles peuvent être exécutées. Les conteneurs sont les instances d'image dans lesquelles plusieurs conteneurs de la même image peuvent être exécutés, chacun dans un état différent.

Nous avons également parlé du cycle de vie des conteneurs et appris les commandes de base pour les gérer.

Maintenant que nous connaissons les bases, il est temps d'en savoir plus sur le monde passionnant de Docker et de commencer à approfondir nos connaissances!