Virtualisation et Conteneurisation : Docker et Podman

32 carte

32 carte

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

Inizia un quiz

Testa le tue conoscenze con domande interattive