Comment créer sa solution de conteneurisation¶
Warning
Cette page a été générer par gemini et n'a pas encore été revu. Il peut donc y avoir des erreurs
Les fondations d'un conteneur
Contrairement aux machines virtuelles, un conteneur n'émule pas un système d'exploitation tout entier. Il se contente d'isoler un processus en se basant sur 3 grands concepts natifs du noyau Linux :
- chroots (Isolation du système de fichiers)
- cgroups (Limitation des ressources)
- namespaces (Isolation de l'environnement)
chroots¶
La commande chroot (Change Root) est la plus ancienne de ces trois technologies. Elle permet de modifier le répertoire racine (/) visible par un processus en cours d'exécution et tous ses processus enfants.
- Le but : Enfermer le processus dans un dossier spécifique pour l'empêcher d'accéder aux fichiers critiques du reste de la machine hôte.
- Analogie : C'est comme donner à une personne les clés d'une seule pièce fermée dans une grande maison, en lui faisant croire que cette pièce est la maison toute entière.
cgroups¶
Les Control Groups (ou cgroups) ont été créés pour permettre de limiter, de prioriser et de surveiller l'utilisation des ressources matérielles par un groupe de processus.
- Le but : Empêcher un conteneur de devenir incontrôlable et de monopoliser toute la puissance de la machine hôte.
- Ressources limitables :
- Le temps de calcul du processeur (CPU).
- La mémoire vive maximale allouée (RAM).
- La bande passante du réseau ou les lectures/écritures sur le disque dur.
namespaces¶
Une petite précision technique
Il est courant de faire un lapsus avec cname (qui est utilisé pour les noms de domaine sur le web). Dans l'architecture d'un conteneur, le terme exact est bien namespaces (espaces de noms).
Les namespaces s'assurent que le processus isolé ne "voit" que ce qu'il a le droit de voir, en lui créant une illusion d'indépendance.
- Le but : Isoler les ressources globales du système pour qu'elles paraissent exclusives au conteneur.
- Exemples d'isolation :
- L'espace PID (Process ID) : Le conteneur croit que son processus principal est le numéro 1, même s'il porte le numéro 4598 sur la machine hôte.
- L'espace Réseau : Le conteneur possède sa propre interface réseau virtuelle et sa propre adresse IP, invisibles depuis les autres conteneurs.
- L'espace UTS : Permet au conteneur d'avoir son propre nom de machine (hostname).
Créer son Conteneur¶
Voici la version la plus simple possible d'un script Bash pour simuler la création de ton propre conteneur. Ce script combine les 3 concepts détaillés ci-dessus :
#! /usr/bin/env bash
# 1. chroots : Création du dossier racine du conteneur
mkdir -p /tmp/mon_conteneur
# (Dans un vrai conteneur, on copierait ici des binaires de base comme /bin/bash, /bin/ls, etc.)
# 2. cgroups : Création d'une limite de mémoire (ex: 500 Mo maximum)
cgcreate -g memory:/mon_cgroup
cgset -r memory.limit_in_bytes=500M mon_cgroup
# 3. namespaces : Lancement du processus isolé avec "unshare"
# Explication des drapeaux (flags) :
# -p : isole les processus (PID)
# -u : isole le nom d'hôte (UTS)
# -n : isole le réseau (Network)
# -f : fork pour lancer un nouveau processus
cgexec -g memory:mon_cgroup unshare -p -u -n -f chroot /tmp/mon_conteneur /bin/bash
Félicitations !
Avec ces quelques lignes, tu viens de répliquer les mécanismes fondamentaux sur lesquels reposent tous les grands moteurs de conteneurisation modernes !