Accueil » Cours » Administration système » Introduction à Docker

Objectif du cours

Ce cours vise à fournir une introduction complète à Docker, une plateforme open-source qui automatise le déploiement d’applications dans des conteneurs logiciels. L’objectif est de comprendre les concepts clés de Docker, de maîtriser les commandes de base, et de développer les compétences nécessaires pour travailler avec cette technologie dans des environnements de développement, de test et de production.

Plan du cours

  1. Qu’est-ce que Docker ?

    • Définition et avantages de Docker : Docker est une plateforme qui permet de créer, déployer et exécuter des applications à l’intérieur de conteneurs. Les conteneurs sont des environnements isolés, légers, et portables, qui contiennent tout ce dont une application a besoin pour fonctionner. Les principaux avantages incluent la cohérence entre les environnements, la portabilité des applications, et une gestion simplifiée des dépendances.

    • Portabilité des applications : Grâce aux conteneurs, une application peut être développée une fois et fonctionner de la même manière sur n’importe quelle machine, que ce soit en développement, en test ou en production. Cette portabilité réduit les problèmes de compatibilité entre les environnements.

    • Isolation et efficacité des ressources : Chaque conteneur est isolé des autres, ce qui permet de s’assurer que les applications n’interfèrent pas entre elles. De plus, Docker utilise les ressources système de manière efficace, permettant un démarrage rapide des conteneurs et une utilisation optimisée des ressources.

    • Cas d’utilisation de Docker : Docker est particulièrement utile dans des scénarios tels que le développement collaboratif, où plusieurs développeurs doivent travailler sur le même projet, les tests continus, qui nécessitent un environnement stable et reproductible, et le déploiement multi-environnement, où la cohérence est essentielle.

  2. Installation et Configuration

    • Installation de Docker sur Linux (commandes essentielles) : Pour installer Docker sur Linux, il est nécessaire d’utiliser des commandes pour ajouter les référentiels Docker, installer le logiciel, et configurer les autorisations afin de permettre à l’utilisateur d’exécuter Docker sans privilèges administratifs.

    • Installation sur Windows et macOS : Docker Desktop est une application tout-en-un qui permet d’installer Docker facilement sur Windows et macOS. Docker Desktop inclut Docker Engine, Docker CLI, Docker Compose, et d’autres outils pour faciliter l’utilisation de Docker sur des machines locales.

    • Configuration initiale et vérification de l’installation : Après l’installation, il est recommandé de vérifier que Docker est installé correctement en utilisant la commande $ docker --version et de démarrer le service Docker si nécessaire.

    • Configuration avancée : Docker Compose permet de définir des applications multi-conteneurs via un fichier YAML. Cela facilite la gestion de plusieurs services fonctionnant ensemble, par exemple une application web avec sa base de données.

  3. Fonctionnalités Clés de Docker

    • Portabilité : Docker garantit que les applications fonctionnent de manière identique peu importe l’environnement, qu’il s’agisse du développement, des tests ou de la production. Cela réduit considérablement les problèmes liés à la configuration des environnements.

    • Isolation : Chaque conteneur est isolé des autres. Cela signifie qu’une application dans un conteneur ne peut pas affecter les autres conteneurs, ce qui améliore la sécurité et la stabilité globale du système.

    • Efficacité : Docker est conçu pour être léger et rapide. Les conteneurs démarrent rapidement, consomment moins de ressources par rapport aux machines virtuelles, et permettent une meilleure utilisation des ressources disponibles.

    • Sécurité : Docker fournit un niveau de sécurité élevé grâce à l’isolation des processus, à la limitation des ressources, et à la gestion des droits et privilèges des utilisateurs. Cette isolation permet de protéger les applications contre d’éventuelles attaques.

  4. Commandes Générales

    • Démarrer Docker : La commande $ sudo systemctl start docker permet de démarrer le service Docker sur les systèmes basés sur systemd.

    • Vérifier le statut de Docker : Utilisez $ sudo systemctl status docker pour vérifier si Docker fonctionne correctement et obtenir des informations sur l’état du service.

    • Autres commandes importantes : Il est possible de redémarrer Docker avec $ sudo systemctl restart docker et d’arrêter le service avec $ sudo systemctl stop docker. Ces commandes sont utiles pour la gestion des services Docker lors de la configuration ou des mises à jour.

  5. Commande Docker Run

    • Lancer un conteneur en mode interactif : La commande $ docker run -it <image_name> /bin/bash permet de démarrer un conteneur et d’accéder à un terminal interactif pour exécuter des commandes à l’intérieur du conteneur.

    • Lancer un conteneur en arrière-plan : Avec $ docker run -d <image_name>, le conteneur est lancé en mode détaché, ce qui signifie qu’il s’exécute en arrière-plan.

    • Mapper un port local avec celui du conteneur : La commande $ docker run -d -p 8080:80 <image_name> permet de rediriger un port de la machine hôte vers un port du conteneur, facilitant l’accès aux applications qui s’exécutent dans le conteneur.

    • Autres options utiles : Docker permet de limiter l’utilisation des ressources des conteneurs avec les options --memory et --cpus. Il est également possible de définir des variables d’environnement avec l’option -e, ce qui est pratique pour configurer les applications à l’intérieur des conteneurs.

  6. Gestion des Conteneurs et des Images Docker

    • Lister les conteneurs existants : $ docker ps -a affiche la liste de tous les conteneurs, qu’ils soient en cours d’exécution ou arrêtés. Cela permet de suivre l’état des différents conteneurs sur la machine.

    • Démarrer, arrêter et supprimer des conteneurs : Les commandes $ docker start <container-id>, $ docker stop <container-id> et $ docker rm <container-id> permettent de gérer le cycle de vie des conteneurs. Cela inclut la reprise de conteneurs existants, l’arrêt de ceux en cours d’exécution et la suppression de ceux qui ne sont plus nécessaires.

    • Lister les images Docker locales : $ docker images liste toutes les images disponibles sur la machine. Ces images peuvent être utilisées pour créer des conteneurs.

    • Télécharger une image Docker : $ docker pull <image-name> télécharge une image depuis Docker Hub ou un autre registre Docker.

    • Construire une image Docker à partir d’un Dockerfile : $ docker build -t <image-name> . permet de créer une nouvelle image personnalisée à partir d’un Dockerfile. Cette image peut ensuite être utilisée pour lancer des conteneurs.

    • Gestion avancée des images : Il est possible de taguer une image avec $ docker tag <image-id> <repository:tag> pour organiser et versionner les images. La commande $ docker push <repository:tag> permet de pousser une image vers un registre Docker afin de la partager avec d’autres utilisateurs ou équipes.

  7. Gestion des Volumes Docker

    • Création et suppression de volumes pour persister les données : Les volumes Docker permettent de stocker des données en dehors du conteneur, ce qui les rend persistantes même lorsque le conteneur est supprimé. $ docker volume create <volume-name> permet de créer un volume, et $ docker volume rm <volume-name> de le supprimer.

    • Montage de volumes : Lors du lancement d’un conteneur, il est possible de monter un volume avec la commande $ docker run -v /local/path:/container/path <image_name>. Cela permet de partager des fichiers entre la machine hôte et le conteneur, et de conserver les données entre les redémarrages des conteneurs.

  8. Réseaux Docker

    • Introduction aux réseaux Docker : Docker propose différents types de réseaux tels que bridge (le réseau par défaut pour les conteneurs sur une seule machine), host (qui permet au conteneur d’utiliser directement l’interface réseau de l’hôte) et overlay (pour connecter des conteneurs sur plusieurs hôtes).

    • Création et gestion des réseaux : La commande $ docker network create <network-name> permet de créer un réseau personnalisé pour connecter des conteneurs. Les réseaux Docker permettent de mieux contrôler la communication entre les conteneurs.

    • Connexion de conteneurs à un réseau : Il est possible de connecter un conteneur à un réseau existant avec la commande $ docker network connect <network-name> <container-name>. Cela facilite la mise en place de liaisons entre les différents services d’une application.

  9. Nettoyage des Ressources avec Docker Prune

    • Utilisation de $ docker system prune : Cette commande est utilisée pour nettoyer les ressources non utilisées, notamment les conteneurs arrêtés, les images inutilisées, et les volumes non référencés. Elle permet de libérer de l’espace sur la machine hôte.

    • Nettoyage ciblé : Docker offre des commandes spécifiques pour supprimer uniquement certains types de ressources. Par exemple, $ docker container prune supprime les conteneurs arrêtés, $ docker image prune supprime les images non utilisées, et $ docker volume prune supprime les volumes inutilisés.

  10. Introduction à Docker Compose

    • Définition et Utilité : Docker Compose est un outil qui permet de définir et gérer des applications utilisant plusieurs conteneurs à l’aide d’un fichier YAML. Il est particulièrement utile pour les architectures complexes comprenant plusieurs services qui doivent être orchestrés ensemble.

    • Commandes de base : $ docker-compose up démarre tous les services définis dans le fichier docker-compose.yml, tandis que $ docker-compose down arrête et supprime ces services, facilitant la gestion de l’ensemble des conteneurs associés.

    • Exemple de fichier docker-compose.yml : Un fichier docker-compose.yml typique pourrait définir une application web composée d’un serveur web (comme Nginx), d’une application backend (comme une API Python Flask), et d’une base de données (comme PostgreSQL). Cela permet de tout orchestrer avec une seule commande.

Conclusion

À la fin de ce cours, vous aurez une bonne compréhension de l’utilisation de Docker pour créer, déployer et gérer des conteneurs logiciels. Vous serez également capable de gérer des réseaux Docker, de persister des données à l’aide de volumes, et de travailler avec des applications multi-conteneurs grâce à Docker Compose. Docker est un outil puissant qui simplifie la gestion des applications et qui est essentiel pour les développeurs modernes travaillant avec des environnements DevOps.

Retour en haut