Travailler avec des conteneurs Docker

introduction

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

Dans ce didacticiel, nous allons donner un bref aperçu de la relation entre les images Docker et les conteneurs Docker. Ensuite, nous examinerons plus en détail 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 par un système de fichiers racine et ajoutent les modifications de système de fichiers et leurs paramètres d’exécution correspondants dans des couches ordonnées en lecture seule. Contrairement à une distribution Linux typique, une image Docker ne contient normalement que l’essentiel nécessaire à l’exécution de l’application. Les images n’ont pas d’état et elles ne changent pas. Ils constituent 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 un calque lecture-écriture au-dessus de l’image. Cette combinaison de couches en lecture seule surmontées d’une couche en lecture-écriture est appelée 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é à partir de l’espace en lecture seule dans la couche en lecture-écriture, où les modifications sont appliquées. La version de la couche lecture-écriture masque le fichier d’origine mais ne le supprime pas. Les modifications de la couche lecture-écriture existent uniquement 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.

Travailler avec des conteneurs

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

Étape 1: Création de deux conteneurs

La commande + docker run suivante créera 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 du fichier Docker], + bash +, de l’image de base de l’Ubuntu] Ubuntu, pour nous déposer dans un shell.

docker run -ti ubuntu

L’invite de ligne de commande change pour indiquer que nous sommes dans le conteneur en tant qu’utilisateur root, suivi de l’ID de conteneur de 12 caractères.

Nous apporterons une modification en faisant écho à un texte dans le répertoire + / tmp + du conteneur, puis nous utiliserons + cat + pour vérifier qu’il a bien été enregistré.

echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txt
OutputExample1

Maintenant, sortons du conteneur.

exit

Les conteneurs Docker cessent de fonctionner dès que la commande qu’ils ont émise est terminée. Notre conteneur s’est donc arrêté lorsque nous avons quitté le shell bash. Si nous lançons` + docker ps + `, la commande permettant d’afficher les conteneurs en cours d’exécution, nous ne verrons pas les nôtres.

docker ps
OutputCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Si nous ajoutons l’indicateur + -a +, qui montre all conteneurs, arrêtés ou en cours d’exécution, notre conteneur apparaîtra dans la liste:

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

Lors de la création du conteneur, son ID de conteneur et un nom généré de manière aléatoire lui ont été attribués. Dans ce cas, 11cc47339ee1 est l’ID du conteneur et + small_sinoussi + est le nom généré de manière aléatoire. + ps -a + affiche ces valeurs, ainsi que l’image à partir de laquelle le conteneur a été construit (+ ubuntu +), lors de la création du conteneur (+ six minutes plus tôt +), ainsi que la commande qui y était exécutée (+ / bin / bash +). La sortie fournit également le statut du conteneur (+ Exited +) et la date à laquelle le conteneur est entré dans cet état (+6 secondes auparavant +). Si le conteneur était toujours en cours d’exécution, nous verrions l’état «Up» suivi de la durée de son exécution.

Si nous réexécutons la même commande, un conteneur entièrement nouveau est créé:

docker run -ti ubuntu

Nous pouvons dire qu’il s’agit d’un nouveau conteneur car l’ID dans l’invite de commande est différent, et lorsque nous recherchons notre fichier Example1, nous ne le trouvons pas:

cat /tmp/Example1
Outputcat: /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 second conteneur pour voir qu’il est, et notre premier conteneur avec le fichier que nous avons créé, sont tous deux sur le système.

exit

Lorsque nous répertorions à nouveau les conteneurs, les deux apparaissent:

docker ps -a
OutputCONTAINER 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émarrage du premier conteneur

Pour redémarrer un conteneur existant, nous allons utiliser la commande + start + avec l’indicateur + -a + pour l’attacher et l’indicateur + -i + pour le rendre interactif, suivi de l’ID ou du nom du conteneur. Assurez-vous de remplacer l’ID de votre conteneur dans la commande ci-dessous:

docker start -ai

Nous nous trouvons encore une fois à l’invite bash du conteneur et quand nous "cat +" le fichier que nous avons créé précédemment, il est toujours là.

cat /tmp/Example1.txt
OutputExample1

Nous pouvons sortir du conteneur maintenant:

exit

Cette sortie montre que les modifications apportées à l’intérieur du conteneur persistent lors de son arrêt et de son démarrage. Ce n’est que lorsque le conteneur est supprimé que le contenu est supprimé. Cet exemple montre également que les modifications ont été 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: Suppression des deux conteneurs

Nous avons créé deux conteneurs et nous terminerons notre bref tutoriel en les supprimant. La commande + docker rm +, qui ne fonctionne que sur les conteneurs arrêtés, vous permet de spécifier le nom ou l’ID d’un ou plusieurs conteneurs, afin que nous puissions les supprimer avec les éléments suivants:

docker rm 11cc47339ee1 kickass_borg
Output11cc47339ee1
kickass_borg

Les deux conteneurs et 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 il 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, consultez notre guide: Naming Docker Conteneurs: 3 conseils pour les débutants.