Virtualisation et Conteneurisation : Docker et Podman

32 cartes

32 cartes

Réviser
La répétition espacée te présente chaque carte au moment optimal pour la mémoriser durablement, en espaçant les révisions de façon croissante.
Question
Qu'est-ce que la virtualisation lourde (Machine Virtuelle) ?
Réponse
Une VM est une émulation complète d'un système informatique, incluant son propre OS, isolée du système hôte.
Question
Quels sont les avantages des Machines Virtuelles ?
Réponse
Isolation totale, ressources dédiées, possibilité d'installer différents OS.
Question
Quels sont les inconvénients des Machines Virtuelles ?
Réponse
Démarrage lent, réservation des ressources (CPU/RAM) même si non utilisées.
Question
Qu'est-ce que la conteneurisation ?
Réponse
Technique légère d'exécution d'applications dans des conteneurs isolés, partageant le noyau de l'OS hôte.
Question
Quelle est la principale différence entre une VM et un conteneur ?
Réponse
Une VM inclut un OS complet ; un conteneur partage le noyau de l'OS hôte, le rendant plus léger et rapide.
Question
Citez les mécanismes de base de la conteneurisation.
Réponse
Namespaces, Cgroups, UnionFS/OverlayFS, Rootfs.
Question
Quel est le rôle des Namespaces dans la conteneurisation ?
Réponse
Ils assurent l'isolement des processus, réseau, systèmes de fichiers, noms d'hôte et utilisateurs pour chaque conteneur.
Question
À quoi servent les Cgroups (Control Groups) ?
Réponse
Ils gèrent et limitent l'utilisation des ressources (CPU, mémoire, I/O) par les conteneurs.
Question
Comment UnionFS/OverlayFS contribuent-ils à la conteneurisation ?
Réponse
Ils permettent la construction d'images par couches, réduisant l'espace disque et accélérant le déploiement.
Question
Qu'est-ce qu'un Rootfs (Root Filesystem) dans un conteneur ?
Réponse
C'est l'ensemble minimal de fichiers (bibliothèques, binaires) nécessaire à l'application, utilisant le noyau de l'hôte.
Question
Qu'est-ce que Docker ?
Réponse
Plateforme open-source pour développer, livrer et exécuter des applications dans des conteneurs, garantissant la portabilité.
Question
Citez les composants principaux de Docker.
Réponse
Docker Engine, Docker CLI, Docker Image, Dockerfile, Docker Container, Docker Registry, Docker Hub, Docker Client.
Question
Quel est le rôle de Docker Engine ?
Réponse
Le moteur principal qui exécute et gère les conteneurs, fonctionnant comme un daemon client-serveur.
Question
Qu'est-ce qu'un Dockerfile ?
Réponse
Un fichier texte contenant la série d'instructions pour construire une image Docker.
Question
Qu'est-ce qu'une Docker Image ?
Réponse
Un fichier exécutable contenant tout le code et les dépendances nécessaires à une application, construite en couches.
Question
De quoi se compose une Docker Image au niveau technique ?
Réponse
D'une ou plusieurs archives tar (système de fichiers en couches) et d'un fichier JSON (métadonnées et configuration).
Question
Qu'est-ce qu'un Docker Container ?
Réponse
Une instance en cours d'exécution d'une image Docker, isolée et partageant le noyau de l'hôte.
Question
Quel est le rôle de Docker Registry et Docker Hub ?
Réponse
Docker Registry stocke et distribue les images. Docker Hub est le dépôt public par défaut de Docker.
Question
Comment démarrer un conteneur Nginx exposant le port 8080 de l'hôte au port 80 du conteneur, en mode détaché et nommé 'mon_nginx' ?
Réponse
docker run -d -p 8080:80 --name mon_nginx nginx:latest
Question
Quelle commande permet de lister tous les conteneurs Docker (actifs et arrêtés) ?
Réponse
docker ps -a
Question
Comment supprimer une image Docker locale ?
Réponse
docker rmi <image_id>
Question
Comment se connecter à un conteneur Docker en cours d'exécution ?
Réponse
docker exec -it <id_conteneur> /bin/bash
Question
Qu'est-ce que Podman ?
Réponse
Alternative open-source à Docker, sans démon central, supportant l'exécution rootless et les pods.
Question
Quelle est la principale différence d'architecture entre Podman et Docker ?
Réponse
Podman n'a pas de service dockerd (démon central) ; il utilise une architecture sans serveur pour la gestion des conteneurs.
Question
Quel est l'avantage de l'exécution 'rootless' avec Podman ?
Réponse
Meilleure sécurité car les conteneurs peuvent être exécutés sans privilèges d'administrateur.
Question
Qu'est-ce qu'un 'pod' pour Podman ?
Réponse
Une unité de base qui peut contenir un ou plusieurs conteneurs partageant les mêmes ressources (réseau, système de fichiers, namespaces).
Question
Comment créer un pod Podman nommé 'monpod' et exposer le port 8080 de l'hôte au port 80 du pod ?
Réponse
podman pod create --name monpod -p 8080:80
Question
Comment attacher un conteneur (ex: httpd) à un pod 'monpod' existant avec Podman ?
Réponse
podman run --pod monpod --name my-hhtpd -dt docker.io/library/httpd:2.4.58-alpine3.18
Question
Quelle commande permet de lister les pods Podman ?
Réponse
podman pod ls
Question
Comment supprimer un pod Podman et tous les conteneurs associés ?
Réponse
podman pod rm -f <nom_du_pod>
Question
Quelle est la commande pour télécharger une image Podman (exemple Ubuntu 22.04 depuis Docker Hub) ?
Réponse
podman pull docker.io/library/ubuntu:22.04
Question
Comment construire une image Podman depuis un Dockerfile ?
Réponse
podman build -t mon_app:1.0 .

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 dockerd en 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 podman sur 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