Aller au contenu

Exercice 1 — Un conteneur LXC dans Proxmox

Durée : ~30 min · Individuel · Théorie associée : VM, LXC et Docker

Objectif

Vous avez créé un conteneur LXC entièrement depuis l'interface web de Proxmox. Vous savez d'où il vient (un template, l'équivalent d'une image), et vous avez constaté ce qui le distingue d'une VM : sa taille, sa consommation de mémoire et sa vitesse de démarrage. Vous referez les mêmes constats avec Docker dans les exercices suivants.

Prérequis

  • Votre serveur Proxmox de la semaine 2, accessible à https://10.70.44.#:8006. Le # est votre numéro de serveur dans le tableau de la semaine 2.
  • Tout l'exercice se fait dans l'interface web de Proxmox. Les quelques commandes se tapent dans la Console du conteneur.

Vous travaillez seul, sur votre propre serveur. Dans tout l'exercice, remplacez # par votre numéro de serveur.

CT ID Nom Adresse
741 lxc-test 10.70.#.41/16

Exemple : sur le serveur S04, le conteneur prend l'adresse 10.70.4.41. Les captures montrent ce serveur.

Étape 1 — Trouver l'image : le template

Sélectionnez le stockage local de votre nœud, puis l'onglet CT Templates.

Si debian-13-standard_13.6-1_amd64.tar.zst n'y est pas, cliquez sur Templates, cherchez debian-13-standard, puis cliquez sur Download. Le template téléchargé sert à tous les conteneurs que vous créerez sur ce nœud.

Une fois le template dans la liste, regardez sa taille (colonne Size). Comparez-la à celle de l'ISO de Debian de la semaine 2 et à celle de l'image cloud Debian de la semaine 4, environ 350 Mo.

Un template LXC est une archive qui contient l'arborescence d'un Debian (/bin, /etc, /usr...), mais pas de noyau. C'est ce qui le rend si petit. Il a les mêmes propriétés qu'une image Docker :

Template LXC Image Docker
Contenu Les fichiers d'un système, sans noyau Les fichiers d'une application et de ses dépendances, sans noyau
Provenance Le dépôt de Proxmox, bouton Templates Un registre, Docker Hub par défaut
Nom debian-13-standard_13.6-1_amd64 : nom, version, architecture nginx:1.27 : nom, étiquette
Utilisation Sert de point de départ à chaque conteneur, sans jamais être modifié Pareil

Étape 2 — Créer le conteneur

Cliquez sur Create CT en haut à droite.

Onglet Champ Valeur
General Node votre nœud
General CT ID 741
General Hostname lxc-test
General Unprivileged container coché (valeur par défaut)
General Nesting coché (valeur par défaut)
General Password au choix, notez-le
Template Storage / Template local / debian-13-standard_13.6-1_amd64.tar.zst
Disks Disk size (GiB) 4
CPU Cores 1
Memory Memory / Swap 512 / 512 (valeurs par défaut)
Network Bridge vmbr0
Network IPv4 Static, 10.70.#.41/16
Network Gateway (IPv4) 10.70.0.1

L'onglet General avec le CT ID 741, le nom lxc-test, Unprivileged container et Nesting cochés

L'onglet Template avec le stockage local et le template debian-13-standard_13.6-1_amd64.tar.zst

L'onglet Network avec le bridge vmbr0, l'adresse 10.70.4.41/16 et la passerelle 10.70.0.1

Remarquez ce que l'assistant ne demande pas : pas d'ISO, pas de type de système, pas de contrôleur de disque, pas de modèle de carte réseau. Un conteneur n'a pas de matériel virtuel.

À l'onglet Confirm, cochez Start after created, relisez le résumé, puis cliquez sur Finish.

Le résumé de l'onglet Confirm : features nesting=1, unprivileged 1, rootfs local-lvm:4, et la case Start after created cochée

Étape 3 — Mesurer la création

Dans le panneau Tasks, en bas de l'écran, repérez la tâche CT 741 - Create. Comparez ses colonnes Start Time et End Time : la création a pris environ une minute.

Le panneau Tasks : CT 741 - Create de 22:34:13 à 22:35:22, puis CT 741 - Start en six secondes

Double-cliquez sur la tâche pour lire son journal. Proxmox n'a rien installé : il a créé le disque, puis y a extrait l'archive du template. À la semaine 2, l'installation de Windows Server 2025 avait pris une vingtaine de minutes.

Étape 4 — Mesurer le démarrage

Sélectionnez votre conteneur, puis cliquez sur Shutdown en haut à droite. Attendez que son icône devienne grise.

Ouvrez l'onglet Console, puis cliquez sur Start, et regardez la console. L'invite lxc-test login: apparaît en une ou deux secondes. Dans le panneau Tasks, la tâche CT 741 - Start le confirme.

Une VM met de 30 secondes à une minute pour en arriver là : son micrologiciel doit s'exécuter, puis son noyau doit démarrer et détecter son matériel virtuel. Le conteneur n'a ni micrologiciel ni noyau : il utilise le noyau du nœud, déjà en marche. Proxmox ne fait que lancer ses programmes dans un espace isolé.

Étape 5 — Regarder à l'intérieur

Dans la console, connectez-vous avec root et le mot de passe choisi à l'étape 2. Tapez ces commandes l'une après l'autre :

Bash
hostname
ps -ef

hostname répond lxc-test : le conteneur a son propre nom. ps -ef affiche une quinzaine de processus : /sbin/init (systemd) porte le numéro 1, et lance des services, comme cron, sshd ou postfix. C'est un Debian complet, qui démarre ses services comme une VM. On l'appelle un conteneur système. Aucun processus du nœud n'apparaît, alors que le nœud en exécute plusieurs centaines.

La console du conteneur : hostname répond lxc-test, et ps -ef affiche /sbin/init au PID 1, suivi d'une quinzaine de services

Bash
uname -r

Notez la version affichée. Sélectionnez ensuite le nœud dans l'arborescence, onglet Summary, et lisez la ligne Kernel Version. C'est la même : le conteneur n'a pas de noyau à lui, il utilise celui du nœud.

La console du conteneur : uname -r répond 7.0.2-6-pve

Le Summary du nœud : la ligne Kernel Version affiche Linux 7.0.2-6-pve

Note

Depuis le Shell du nœud, pct exec 741 -- uname -r lance la même commande dans le conteneur, sans s'y connecter. Dans ce cours, on passe par la console du conteneur.

Étape 6 — Observer le conteneur

Ouvrez l'onglet Summary du conteneur. Relevez la mémoire utilisée (Memory usage) et l'espace occupé sur le disque (Bootdisk size). Le conteneur consomme quelques dizaines de Mo de mémoire, là où une VM Debian au repos en consomme plusieurs centaines. Vous le constaterez avec la VM de l'exercice 2.

Le Summary du conteneur 741 : 22,57 Mio de mémoire utilisée et 571 Mio occupés sur le disque

Parcourez ensuite les onglets Resources, Network et Options : vous y retrouvez la plupart des réglages d'une VM, mais aucun matériel.

Étape 7 — Changer la mémoire à chaud

Dans la console du conteneur :

Bash
free -m

La colonne total de la ligne Mem: affiche environ 512.

Dans l'onglet Resources, double-cliquez sur Memory et remplacez 512 par 256. Validez. Revenez à la console, et tapez de nouveau free -m : le total est passé à 256. Le conteneur n'a pas redémarré, et votre session est toujours ouverte.

La console du conteneur avant le changement : free -m affiche 512 Mio au total

La fenêtre Edit: Memory de l'onglet Resources, avec 256 dans le champ Memory et 512 dans le champ Swap

La console du conteneur après le changement : free -m affiche 256 Mio au total, dans la même session

Pour une VM, une modification de la mémoire reste en général en attente, affichée en rouge dans l'onglet Hardware, jusqu'au prochain redémarrage : il faut changer le matériel virtuel. Pour un conteneur, il n'y a pas de matériel à changer. Proxmox demande seulement au noyau du nœud d'appliquer une nouvelle limite aux programmes du conteneur. Docker fait la même chose avec l'option --memory.

Étape 8 — Faire le ménage

Cliquez sur Shutdown, attendez l'arrêt, puis More › Remove. Cochez Destroy unreferenced disks owned by guest, tapez le CT ID pour confirmer, puis cliquez sur Remove.

Revenez à l'onglet CT Templates du stockage local : le template est toujours là. Supprimer un conteneur ne supprime pas son template, comme supprimer un conteneur Docker ne supprime pas son image.

Vérification finale

  • Le template debian-13-standard est présent sur le stockage local du nœud
  • Vous avez mesuré la durée de la création et celle du démarrage dans le panneau Tasks
  • uname -r dans la console a affiché la même version que la ligne Kernel Version du nœud
  • free -m est passé de 512 à 256 Mio sans redémarrage du conteneur
  • Le conteneur 741 est supprimé, et le template est resté

Question 1

Vous créez trois conteneurs à partir du même template, et vous modifiez des fichiers dans le premier. Le template est-il modifié ? Les deux autres conteneurs voient-ils ces modifications ?

Voir la réponse Non dans les deux cas. À la création, Proxmox extrait le template sur le disque **propre à chaque conteneur**. Le template n'est jamais modifié, et chaque conteneur a ses propres fichiers. C'est la même relation qu'entre une image Docker et ses conteneurs, que vous verrez à l'exercice 3.

Question 2

Pourquoi le conteneur démarre-t-il en une ou deux secondes, alors qu'une VM met une minute ?

Voir la réponse Le conteneur n'a pas de noyau à démarrer ni de matériel à détecter. Il utilise le noyau du nœud, qui tourne déjà. Démarrer le conteneur, c'est seulement lancer ses programmes dans un espace isolé. La contrepartie : un conteneur Linux ne peut exécuter que des programmes Linux, et une faille du noyau du nœud touche tous les conteneurs à la fois.

Question 3

Ce conteneur LXC démarre un Debian complet, avec ses services, et on s'y connecte pour l'administrer. En quoi un conteneur Docker sera-t-il différent ?

Voir la réponse Un conteneur LXC est un conteneur **système** : il fait tourner un système entier, qu'on entretient comme un petit serveur. Un conteneur Docker est un conteneur **applicatif** : il ne fait tourner qu'**un seul programme**, l'application, avec ses dépendances. On ne s'y connecte pas pour le mettre à jour : on le remplace par un nouveau conteneur, créé à partir d'une nouvelle image.

En cas de problème

Symptôme Cause probable Correction
La liste est vide à l'onglet Template de l'assistant Le template n'est pas encore téléchargé Le télécharger (étape 1), puis relancer Create CT
CT ID 741 already in use Un conteneur ou une VM porte déjà ce numéro sur votre serveur Supprimer l'ancien conteneur s'il vous appartient. Sinon, prévenir l'enseignant : le serveur est partagé avec l'autre groupe
La console reste noire après Start La console s'est ouverte avant le démarrage Appuyer sur Entrée dans la console
Remove est grisé Le conteneur est encore en marche Shutdown, puis attendre que l'icône devienne grise
La modification de la mémoire est refusée Une autre tâche est en cours sur le conteneur Attendre la fin de la tâche dans le panneau Tasks