Le CLI
Fonctionnement du CLI
Maintenant que Docker est totalement fonctionnel sur votre machine, place à la pratique !
Le CLI (Command Line Interface) de Docker, disponible avec chacune de ses installations, permet de piloter le service à l’aide de lignes de commande, comme son nom l’indique. Il suffit de lancer un terminal pour interagir avec lui, grâce à la commande docker. Nous allons voir dans ce chapitre les commandes les plus communes et les plus utiles dans un processus de développement.
Une commande du CLI se décompose toujours de la même façon : docker [action] [arguments].
1. État de l’installation
Docker fournit une commande permettant d’obtenir des informations sur l’état de l’installation courante. Cette commande ressemble à celle exécutée pour tester si l’installation est fonctionnelle, exception faite que celle-ci donne deux types d’informations. Il s’agit de la commande version :
docker version
En exécutant cette commande, on va avoir en retour :
-
Les informations sur le CLI (l’outil qu’on est en train d’étudier).
-
Les informations sur le serveur, à savoir, le service ou le démon (dépendant de votre système d’exploitation) qui tourne en tâche de fond et exécute le moteur de Docker.
Il est possible qu’il existe une différence de version entre ces deux outils sans que cela crée d’incompatibilités ou d’erreurs. De façon générale, en passant par les circuits d’installation ou de mise à jour officiels, ce cas de figure ne devrait pas se présenter, les versions étant toujours synchronisées. À noter qu’une version supérieure du CLI par rapport au moteur pourrait causer des erreurs, car il pourrait envoyer des ordres qui ne sont pas encore implémentés dans ce dernier.
En exécutant cette commande dans votre terminal, le retour devrait...
État du système
Il est important de comprendre que la commande run modifie l’état du système local. En effet, l’image associée à votre commande a été téléchargée dans le cache local pour être utilisée pour la reconstruction d’un conteneur à partir de cette même image, si cela est demandé.
De ce fait, si vous avez exécuté l’exemple précédent et si vous saisissez la commande docker run hello-world une nouvelle fois, vous constaterez que les indications concernant le téléchargement n’apparaissent plus.
En tant que développeur, il est utile de savoir ce qui est actuellement présent sur le système. Le CLI met à disposition un ensemble de commandes destinées à cela.
1. Management des images et conteneurs
Bien entendu, il est possible de piloter le cache local et le fonctionnement de Docker grâce à un ensemble de commandes.
Deux informations essentielles à connaître sur l’état de votre système sont :
-
Quelles sont les images présentes sur le système ?
-
Quels sont les conteneurs actuellement en cours d’exécution ?
a. Gestion des images
La syntaxe pour cette action reprend la logique de Docker :
docker images [arguments]
Si vous saisissez la commande sans argument, vous affichez la liste des images disponibles sur votre système :
docker images
Figure 3 : Résultat de la commande docker images
Cette liste reprend les informations essentielles vis-à-vis des images présentes, notamment la date de création, la version et la place occupée sur le disque. L’ID est l’élément principal grâce auquel on va piloter l’image.
Notez la présence très importante du "s" de l’action images dans le nom de la commande. En effet, il existe deux commandes similaires permettant de piloter les images. Celle que nous venons de taper est utilisée uniquement pour lister les images présentes.
Pour gérer une image de façon individuelle, il faut utiliser la commande image (notez l’absence du "s" final). Il est nécessaire de préciser à la suite l’action que l’on souhaite réellement...
Interactions avec le système hôte
Bien qu’un conteneur soit isolé du système hôte, il existe cependant une frange d’interactions permettant l’extension des possibilités.
1. Volumes
Une notion importante à garder à l’esprit lorsque l’on utilise Docker est que la durée de vie des données manipulées est définie par la durée de vie du conteneur auquel elles sont rattachées. Lorsqu’on prévoit le déploiement d’une application par conteneur, c’est dans le but de profiter d’une flexibilité maximale au niveau de l’infrastructure, notamment en redéployant les conteneurs grâce à des orchestrateurs. Ces logiciels déplacent les conteneurs d’un serveur à l’autre d’une manière dynamique définie selon des paramètres indépendants du conteneur. Ceci est possible car nous avons pu constater qu’un conteneur démarre aussi vite qu’il s’arrête.
La problématique rencontrée est qu’il ne s’agit pas de clonage du conteneur, mais bel et bien d’un redéploiement complet (comprendre que la commande rm est exécutée sur le serveur de départ et run sur le serveur de destination, provoquant le démarrage dans un état totalement réinitialisé). En conséquence, tous les fichiers présents sur un conteneur disparaissent avec lui. Ce comportement est désiré dans la majorité des cas, cependant dans d’autres cas, comme par exemple pour déployer des systèmes de gestion de bases de données, l’utilisateur va probablement vouloir conserver les données.
Docker propose une solution pour pallier ce problème : les volumes. Un volume est un lien logique entre un dossier au sein du conteneur et un dossier sur le système hôte. Ainsi, il sera possible de sauvegarder les données produites par le conteneur sur un espace du système hôte, ce qui est parfait pour accéder aux données provenant d’une base de données "en dehors" du conteneur en tant que tel.
Avant de pouvoir utiliser correctement les volumes avec Docker pour Windows, il est nécessaire d’activer le partage...
À vous de jouer !
Il est maintenant l’heure de mettre en pratique ce que vous avez vu dans ce chapitre grâce à un petit exercice complet.
1. Énoncé
Dans cet exercice, vous allez devoir créer un serveur web (image : nginx) qui contient une page HTML simple. Cette page doit être visible depuis votre navigateur local à l’aide de l’URL http://localhost:8080 (ou tout autre port de votre choix si celui-ci est déjà utilisé).
Depuis un autre conteneur (image : debian), nous allons installer le package curl pour récupérer dynamiquement le contenu HTML envoyé par le serveur web et l’afficher dans la console.
Pour pouvoir installer le package curl sur une image Debian, il est nécessaire d’effectuer au préalable la commande apt-get update, puis la commande apt-get install curl. Une fois le package curl installé, il suffit de saisir la commande curl [URL] pour récupérer le contenu à l’URL spécifiée.
Afin de faciliter les développements, il faudra que le fichier HTML soit accessible directement depuis le système hôte (pour le modifier sans avoir à supprimer et recréer le conteneur).
Information : le dossier qui contient les fichiers HTML sur le conteneur nginx est /usr/share/nginx/html.
Pour le défi, vous pouvez essayer de créer le fichier...