Virtualisation et Conteneurisation : Docker et Podman
32 cartes32 cartes
Introduction à la Virtualisation et Conteneurisation
Ce document aborde les concepts de virtualisation avancée, en commençant par un rappel sur la distinction entre la virtualisation lourde (machines virtuelles) et la conteneurisation, suivie d'une exploration détaillée des solutions de conteneurisation comme Docker et Podman, ainsi que des outils d'orchestration et de construction d'images de VM.
Rappel: Machines Virtuelles (VM)
La virtualisation lourde via les VMs offre une isolation totale avec le système hôte. Chaque VM dispose de son propre système d'exploitation complet, garantissant une grande sécurité et la possibilité d'installer des OS variés (Linux, Windows, BSD, etc.). Cependant, cela entraîne des contraintes :
Démarrage lent.
Réservation statique des ressources (CPU/RAM), souvent sous-utilisées.
C'est de ces contraintes qu'est née l'approche plus légère de la conteneurisation.
Rappel: La Conteneurisation
La conteneurisation est une technique qui permet d'exécuter des applications de manière isolée, portable et légère. Un conteneur regroupe tout le nécessaire à une application (code, dépendances, bibliothèques, fichiers de configuration) sans nécessiter un OS complet. Il partage le noyau de l'OS de la machine hôte, ce qui le rend léger et rapide à démarrer.
Mécanismes de base de la Conteneurisation
Namespaces: Permettent l'isolement des processus pour que chaque conteneur semble être seul sur la machine (PID, NET, MNT, UTS, IPC, USER).
Cgroups (Control Groups): Gèrent et limitent l'utilisation des ressources (CPU, mémoire, I/O) pour éviter qu'un conteneur ne monopolise la machine.
UnionFS / OverlayFS: Systèmes de fichiers empilés en couches, permettant aux images d'être construites efficacement, économisant de l'espace disque.
Rootfs (Root Filesystem): Chaque conteneur intègre son propre système de fichiers minimal, mais utilise le noyau de l'hôte.
Isolation par le noyau Linux: Le noyau fournit les primitives d'isolation, rendant les conteneurs plus légers que les VMs.
Docker: Solution de Conteneurisation Dominante
Docker est une plateforme open-source pour développer, livrer et exécuter des applications dans des conteneurs. Un conteneur Docker inclut le code de l'application, ses dépendances et sa configuration pour assurer un fonctionnement uniforme partout.
Composants de Docker
Docker Engine: Moteur principal qui gère et exécute les conteneurs, fonctionnant comme un client-serveur avec un daemon.
Docker CLI: Interface en ligne de commande pour interagir avec le daemon Docker.
Docker Image: Fichier contenant l'application et ses dépendances. Les images sont construites à partir de Dockerfiles.
Dockerfile: Fichier texte contenant toutes les instructions pour créer une image Docker (directives comme FROM, RUN, COPY, CMD).
Docker Container: Instance en cours d'exécution d'une image, isolée et partageant le noyau de l'hôte.
Docker Registry: Service de stockage et de distribution d'images Docker (ex: Docker Hub pour les images publiques, registres privés pour les entreprises).
Docker Client: Interface utilisateur pour interagir avec Docker (CLI ou Docker Desktop).
Anatomie d'une Image Docker (construite en couches)
Une image est composée de plusieurs couches empilées, ce qui optimise l'espace disque et le déploiement. Elle inclut également :
Le système de fichiers racine (rootfs): Assemblage final des couches (
/bin,/lib,/etc,/app).Le manifeste (manifest.json): Décrit la liste des couches, leur ordre et les métadonnées.
Le fichier de configuration (config.json): Contient la commande par défaut (CMD), les variables d'environnement, les volumes/ports exposés et l'utilisateur.
Les métadonnées du registre: Un tag et un digest SHA256 pour l'identification unique.
Exemple d'exécution Docker
Lorsqu'une commande comme docker run hello-world est exécutée :
1. Le client Docker contacte le daemon Docker.
2. Le daemon charge l'image depuis Docker Hub.
3. Le daemon crée et exécute un nouveau conteneur à partir de l'image.
4. Le daemon envoie la sortie au client Docker, qui l'affiche sur le terminal.
Commandes Docker utiles
Gestion des images:
docker images,docker pull,docker rmi,docker build.Gestion des conteneurs:
docker run,docker ps,docker stop,docker rm,docker logs,docker exec.
Podman: L'Alternative Rootless et Sans Daemon
Podman (POD Manager) est une plateforme de conteneurisation open source développée par Red Hat, conçue comme une alternative à Docker avec des différences clés :
Sans démon central: Ne nécessite pas de service
dockerden arrière-plan.Rootless: Peut exécuter des conteneurs sans privilèges root, améliorant la sécurité.
Compatible Docker CLI: Beaucoup de commandes sont identiques à celles de Docker.
Support des Pods: Permet de grouper plusieurs conteneurs (similaire à Kubernetes).
C'est quoi un Pod pour Podman ?
Un pod est l'unité de base dans Podman qui peut contenir un ou plusieurs conteneurs partageant :
Le réseau (adresse IP, ports)
Le système de fichiers (volumes montés)
Certaines ressources et namespaces
Les conteneurs d'un même pod peuvent communiquer via localhost et sont gérés ensemble.
Architecture de Podman
Podman utilise une architecture sans démon, ce qui signifie que chaque conteneur est un processus enfant de Podman ou d'un processus parent, plutôt que d'être géré par un service central.
Commandes Podman utiles
Installation: Via
apt install podmansur Linux ou Podman Desktop sur Windows avec une VM Linux.Gestion des images:
podman search,podman pull,podman images,podman image inspect,podman rmi,podman build.Gestion des conteneurs:
podman run,podman ps,podman logs,podman exec,podman rm.Gestion des pods:
podman pod create(pour créer un pod et exposer des ports au niveau du pod),podman run --pod(pour attacher un conteneur à un pod),podman pod ls,podman pod inspect,podman pod rm.
Lancer un quiz
Teste tes connaissances avec des questions interactives