Travailler avec des conteneurs Docker

Introduction

Docker est un outil de conteneurisation populaire utilisé pour fournir aux applications logicielles un système de fichiers contenant tout ce dont elles ont besoin pour s’exécuter. L’utilisation de conteneurs Docker garantit que le logiciel se comportera de la même manière, peu importe où il est déployé, car son environnement d’exécution est rigoureusement cohérent.

Dans ce tutoriel, nous fournirons un bref aperçu de la relation entre les images Docker et les conteneurs Docker. Ensuite, nous examinerons de manière plus détaillée comment exécuter, démarrer, arrêter et supprimer des conteneurs.

Vue d’ensemble

Nous pouvons considérer une image Docker comme un modèle inerte utilisé pour créer des conteneurs Docker. Les images commencent généralement avec un système de fichiers racine et ajoutent des modifications du système de fichiers et leurs paramètres d’exécution correspondants dans des couches ordonnées et en lecture seule. Contrairement à une distribution Linux typique, une image Docker contient normalement seulement les éléments essentiels nécessaires à l’exécution de l’application. Les images n’ont pas d’état et ne changent pas. Elles forment plutôt le point de départ des conteneurs Docker.

Les images prennent vie avec la commande docker run, qui crée un conteneur en ajoutant une couche en lecture-écriture sur l’image. Cette combinaison de couches en lecture seule surmontée d’une couche en lecture-écriture est appelée un système de fichiers union. Lorsqu’une modification est apportée à un fichier existant dans un conteneur en cours d’exécution, le fichier est copié de l’espace en lecture seule dans la couche en lecture-écriture, où les modifications sont appliquées. La version dans la couche en lecture-écriture cache le fichier d’origine mais ne le supprime pas. Les modifications dans la couche en lecture-écriture n’existent que dans une instance de conteneur individuelle. Lorsqu’un conteneur est supprimé, toutes les modifications sont perdues à moins que des mesures ne soient prises pour les préserver.

Comment travailler avec les conteneurs Docker

  1. Créer deux conteneurs Docker
  2. Redémarrer le premier conteneur
  3. Supprimer les deux conteneurs

Travailler avec des conteneurs

Chaque fois que vous utilisez la commande docker run, elle crée un nouveau conteneur à partir de l’image que vous spécifiez. Cela peut être une source de confusion, alors regardons quelques exemples :

Étape 1 : Création de deux conteneurs

La commande docker run suivante va créer un nouveau conteneur en utilisant l’image de base ubuntu. -t nous donnera un terminal, et -i nous permettra d’interagir avec lui. Nous nous appuierons sur la commande par défaut dans le fichier Docker de l’image de base Ubuntu, bash, pour nous placer dans un shell.

  1. docker run -ti ubuntu

Le prompt de ligne de commande change pour indiquer que nous sommes à l’intérieur du conteneur en tant qu’utilisateur root, suivi de l’ID du conteneur sur 12 caractères.

Nous allons apporter une modification en écrivant du texte dans le répertoire /tmp du conteneur, puis utiliser cat pour vérifier qu’il a été enregistré avec succès.

  1. echo "Example1" > /tmp/Example1.txt
  2. cat /tmp/Example1.txt
Output
Example1

Maintenant, quittons le conteneur.

  1. exit

Les conteneurs Docker s’arrêtent dès que la commande qu’ils ont émise est terminée, donc notre conteneur s’est arrêté lorsque nous avons quitté le shell bash. Si nous exécutons docker ps, la commande pour afficher les conteneurs en cours d’exécution, nous ne verrons pas le nôtre.

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Si nous ajoutons le drapeau -a, qui affiche tous les conteneurs, arrêtés ou en cours d’exécution, alors notre conteneur apparaîtra dans la liste:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi

Lorsque le conteneur a été créé, il a reçu son ID de conteneur et un nom généré aléatoirement. Dans ce cas, 11cc47339ee1 est l’ID du conteneur et small_sinoussi est le nom généré aléatoirement. ps -a montre ces valeurs, ainsi que l’image à partir de laquelle le conteneur a été construit (ubuntu), quand le conteneur a été créé (il y a six minutes), et la commande qui a été exécutée dedans (/bin/bash). La sortie fournit également le statut du conteneur (Exited) et depuis combien de temps le conteneur est dans cet état (il y a 6 secondes). Si le conteneur était toujours en cours d’exécution, nous verrions le statut « Up », suivi de la durée pendant laquelle il était en cours d’exécution.

Si nous relançons la même commande, un nouveau conteneur est entièrement créé:

  1. docker run -ti ubuntu

Nous pouvons dire que c’est un nouveau conteneur car l’ID dans l’invite de commande est différente, et lorsque nous cherchons notre fichier Example1, nous ne le trouverons pas:

  1. cat /tmp/Example1
Output
cat: /tmp/Example1: No such file or directory

Cela peut donner l’impression que les données ont disparu, mais ce n’est pas le cas. Nous allons maintenant quitter le deuxième conteneur pour voir qu’il, ainsi que notre premier conteneur avec le fichier que nous avons créé, sont tous deux sur le système.

  1. exit

Lorsque nous listons à nouveau les conteneurs, les deux apparaissent:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg 11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi

Étape 2 : Redémarrer le premier conteneur

Pour redémarrer un conteneur existant, nous utiliserons la commande start avec le drapeau -a pour s’y attacher et le drapeau -i pour le rendre interactif, suivi soit de l’ID du conteneur ou de son nom. Assurez-vous de substituer l’ID de votre conteneur dans la commande ci-dessous :

  1. docker start -ai 11cc47339ee1

Nous nous retrouvons à nouveau à l’invite bash du conteneur et lorsque nous faisons un cat du fichier que nous avons précédemment créé, il est toujours là.

  1. cat /tmp/Example1.txt
Output
Example1

Nous pouvons maintenant sortir du conteneur :

  1. exit

Cet affichage montre que les modifications apportées à l’intérieur du conteneur persistent après l’arrêt et le redémarrage. Ce n’est que lorsque le conteneur est supprimé que le contenu est effacé. Cet exemple illustre également que les modifications étaient limitées au conteneur individuel. Lorsque nous avons démarré un deuxième conteneur, il reflétait l’état d’origine de l’image.

Étape 3 : Supprimer les deux conteneurs

Nous avons créé deux conteneurs, et nous conclurons notre bref tutoriel en les supprimant. La commande docker rm, qui fonctionne uniquement sur les conteneurs arrêtés, vous permet de spécifier le nom ou l’ID d’un ou plusieurs conteneurs, nous pouvons donc les supprimer tous les deux avec ce qui suit :

  1. docker rm 11cc47339ee1 kickass_borg
Output
11cc47339ee1 kickass_borg

Les deux conteneurs, ainsi que toutes les modifications que nous avons apportées à l’intérieur, ont maintenant disparu.

Conclusion

Nous avons examiné en détail la commande docker run pour voir comment elle crée automatiquement un nouveau conteneur à chaque exécution. Nous avons également vu comment localiser un conteneur arrêté, le démarrer et s’y connecter. Si vous souhaitez en savoir plus sur la gestion des conteneurs, vous pourriez être intéressé par le guide, Nommage des conteneurs Docker : 3 conseils pour les débutants.

Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers