# TP - Explorer les limitations volontaires de ressources dans les conteneurs ## Objectif Comprendre comment Linux limite et mesure les ressources utilisées par un conteneur grâce aux **cgroups**. --- ## Préparer l’environnement Dans votre répertoire `/home/lab/docker`, créez un sous-répertoire `cnt_ressources_limits` et créez un nouveau fichier `dockerfile`. Le contenu de ce dockerfile est le suivant : ```docker FROM ubuntu:24.04 RUN apt-get update && apt-get install -y stress ``` Vous construirez ensuite l'image du conteneur `exo3-tp` à l'aide de la commande suivante : ```bash docker build -t exo3-tp . ``` --- ## Lancer un conteneur avec des limites Créez un conteneur à partir de l'image exo3-tp limité à 256 Mo de RAM et 0.5 CPU : ```bash docker run -dit --name cnt-exo3-tp -m 256m --cpus 0.5 exo3-tp ``` --- ## Observer les limites appliquées Les informations des cgroup sont présents dans le répertoire `cgroup`. ```bash ls /sys/fs/cgroup/ ``` Pour observer les limites appliquées à un conteneur, il est nécessaire de : 1. Connaître l'id complet du conteneur 2. Ouvrir la feuille correspondant au cgroup associé au conteneur ```bash # On recherche le process id du conteneur (PID) en inspectant le conteneur # La synthaxe variable=$(fonction) permet d'enregistrer le retour de la fonction. # /!\ Attention à ne pas mettre d'espace avant et après le signe égal (=) dockerPID=$(docker inspect --format '{{.State.Pid}}' cnt-exo3-tp) # On recherche le cgroup associé au PID cat /proc/$dockerPID/cgroup # Cela nous retourne 0::/system.slice/docker-xxxxxxxx.scope (xxxxxxxx doit être remplacé par le cgroup retrouvé dans votre propre shell) # Depuis là, on connait la sous-arborescence pour retrouver les limites appliquées au processus de notre conteneur. cd /sys/fs/cgroup/system.slice ls cd docker-xxxxxxxx.scope # Maintenant on peut obtenir plein d'information sur les ressources allouées et consommées par notre conteneur. ls cat memory.max cat cpu.max ``` --- ## Tester la limite CPU Dans un autre terminal, surveillez l’utilisation CPU : ```bash docker stats cnt-exo3-tp ``` Lancez un stress CPU dans le conteneur : ## Tester la limite mémoire Lancez un test pour consommer 100 Mo : ```bash docker exec -it cnt-exo3-tp stress --vm 1 --vm-bytes 100M --vm-hang 0 ``` Lancez un test pour consommer plus que 256 Mo : ```bash docker exec -it cnt-exo3-tp stress --vm 1 --vm-bytes 300M --vm-hang 0 ``` → Observez : le processus sera tué par l’OOM killer. --- ## Nettoyage ```bash docker rm -f cnt-exo3-tp ``` --- ## Résultats attendus - Vous savez trouver à quel cgroup appartient un processus. - Vous pouvez lire les limites appliquées dans `/sys/fs/cgroup`. - Vous comprenez comment observer et tester ces limites sur un conteneur.