Docker est installé. Liam apprécie la rapidité avec laquelle vous avez réalisé l’opération. Il aimerait désormais que vous lui fassiez une petite présentation des fonctionnalités qui composent Docker, pour qu’il puisse utiliser ces éléments techniques lors de la prochaine réunion avec les investisseurs…
Découvrez les commandes Docker
Dans cette section, nous allons faire un tour d’horizon des commandes Docker et leurs rôles respectifs.
Cela nous permettra de mettre en lien la terminologie Docker avec des opérations concrètes et également de découvrir deux nouvelles entités logiques ayant un rôle central dans un environnement Docker:
Les volumes: Ils sont utilisés pour stocker des données de manière persistante, voire pour partager des données entre plusieurs conteneurs.
Les networks: Ils permettent la communication réseau entre les conteneurs et avec l’extérieur. Les networks sont associés à un type, chacun permettant de créer différentes topologies réseau.
Voyons ensemble comment manipuler ces éléments avec le client Docker.
Manipulez les commandes Docker
Docker offre une variété de commandes pour gérer les images, les conteneurs, les volumes et les networks.
Voici un aperçu des principales commandes :
Dans cette vidéo, nous avons vu les grandes catégories de commandes :
Les commandes relatives à la manipulation des images, notamment :
Lister les images :
docker images
Télécharger une image :
docker pull <image>
Supprimer une image :
docker rmi <image>
Les commandes relatives à la manipulation des conteneurs
Les commandes relatives à la manipulation des volumes, notamment :
Lister les volumes :
docker volume ls
Créer un volume :
docker volume create <volume_name>
Supprimer un volume :
docker volume rm <volume_name>
Les commandes relatives à la manipulation des networks, notamment:
Lister les networks :
docker network ls
Créer un network :
docker network create <network_name>
Supprimer les networks :
docker network rm <network_name>
Lancez votre premier conteneur
Maintenant que vous êtes familiarisé avec les différentes catégories de commandes, il est grand temps de lancer votre premier conteneur !
Dans cette vidéo, nous avons vu :
Comment télécharger une image avec la commande
docker pull <image>
Comment lancer un conteneur en utilisant l’image téléchargée :
En mode interactif avec la commande
docker run -it <image>
En tâche de fond avec la commande
docker run -d <image>
Avec un volume avec la commande
docker run -v <volume_name>:/path/to/dir -it <image>
En exposant des ports du conteneur avec la commande
docker run -p <host_port>:<container_port> -it <image>
Exposer un port ?
En fonction du type de network utilisé par votre conteneur il sera parfois nécessaire “d’exposer” un port afin que celui-ci soit transposé sur la machine hôte par Docker. Ainsi, une application écoutant sur un port dans votre conteneur sera accessible sur un port de la machine hôte de manière transparente, tout en restant isolée d’un point de vue réseau.
Vous savez désormais comment lancer un conteneur avec Docker. Comme nous l’avons vu ensemble, il est possible de démarrer un conteneur et de laisser celui-ci s'exécuter en tâche de fond.
Comment faire alors pour gérer un tel conteneur par la suite ?
Justement c’est ce que nous allons voir à présent.
Suivez la vie d’un conteneur
Une grande partie des commandes du CLI Docker sont dédiées aux opérations de gestion du cycle de vie des conteneurs.
En effet, un conteneur est une entité persistante dans un environnement Docker. Un conteneur peut donc être démarré, inspecté, interrompu, redémarré ou supprimé.
Parmi les commandes les plus importantes, nous pouvons citer :
Opération | Objectif | Exemple |
Inspecter le(s) processus d’un conteneur | Voir les processus en cours dans un conteneur. | `docker top <container>` |
Voir le journal d’exécution du conteneur | Afficher les logs du conteneur pour débugger ou surveiller. | `docker logs <container>` |
Stopper un conteneur | Arrêter proprement un conteneur (i.e. en laissant le temps au(x) processus interne(s) de s’arrêter). | `docker stop <container>` |
Tuer un conteneur | Arrêter brutalement un conteneur. | `docker kill <container>` |
Supprimer un conteneur | Supprimer un conteneur arrêté pour libérer des ressources. | `docker rm <container>` |
Copier des fichiers depuis/vers un conteneur | Copier des fichiers depuis un conteneur vers l'hôte et vice-versa. | `docker cp <container>:/path/to/file /local/path` |
Avec ces commandes, vous êtes désormais en mesure de démarrer et de gérer le cycle de vie complet d’un conteneur Docker ! Mettons ceci en pratique avec le projet Libra !
À vous de jouer
Contexte
Au hasard d’une rencontre à la machine à café vous croisez Sarah, la CTO de l’entreprise. Vous en profitez pour rapidement lui décrire l’avancée de vos recherches. Toujours dans une approche très concrète des choses, elle vous lance :
Tu sais quoi ? En attendant le Poc (“Proof of Concept”) de Libra, il faudrait que tu démarres quelque chose de la même veine, qu’on ait une idée plus concrète de comment ça se comporte !
Afin de prouver la faisabilité d’un déploiement d’application web dans un conteneur Docker, vous allez récupérer l’image officielle d’un serveur HTTP bien connu, Nginx, et lancer celui-ci sur votre installation Docker.
Consignes
Récupérer l’image Docker officielle
nginx:latest
sur votre machine avec la commandedocker pull
Démarrer un conteneur avec l’image Nginx en exposant le port 80 sur un port local 8080 sur votre machine
Vérifier que le serveur Nginx est bien accessible en local en navigant sur l’URL http://localhost:8080
Vérifiez votre travail à l’aide de cet exemple de corrigé
Voici les commandes à exécuter
# Récupérer la dernière version de l’image Nginx officielle docker pull nginx:latest # Démarrer votre conteneur en mode interactif (Ctrl+C pour le stopper) # en exposant le port 80 du conteneur sur le port 8080 de l’hôte docker run -it -p 8080:80 nginx:latest # Une fois stoppé, lister les conteneurs en incluant ceux stoppés docker ps -a # Supprimer le conteneur (où <container_id> est à remplacer par l’identifiant trouvé avec la commande précédente) docker rm <container_id>
En résumé
Les volumes Docker permettent de créer une persistance des données de nos conteneurs.
Les networks Docker permettent de définir les moyens de communication réseau entre les conteneurs et le monde extérieur.
Les commandes Docker peuvent être résumées à quatre grandes catégories :
Les commandes de gestion du cycle de vie d’un conteneur (ex :
docker run
)Les commandes de gestion d’images (ex :
docker pull
)Les commandes de gestion des volumes (ex :
docker volume create
)Les commandes de gestion des réseaux (ex :
docker network ls
)
Il est temps de découvrir comment créer nos propres images pour déployer des applications personnalisées et c’est ce que nous allons voir dans le prochain chapitre.