Skip to content

Proxmox VE — Machines Virtuelles et Conteneurs

Proxmox VE (Virtual Environment) est une plateforme de virtualisation open source basée sur Debian. Elle combine deux technologies : les machines virtuelles QEMU/KVM (commande qm) et les conteneurs LXC (commande pct).

Synonymes et formulations courantes : démarrer une VM Proxmox, lancer une machine virtuelle, créer une VM, supprimer une VM, snapshot VM, backup VM, restaurer sauvegarde, agrandir disque, migrer une VM, démarrer un conteneur, console LXC, modifier IP LXC, reboot conteneur, snapshot LXC, backup conteneur.


VM, LXC, Docker — Quand utiliser quoi ?

Critère VM (QEMU/KVM) LXC Docker
Isolation Totale — noyau dédié Noyau partagé avec l'hôte Noyau partagé avec l'hôte
Performance Légère perte (~5%) Quasi-native Quasi-native
Ressources Moyennes Très faibles Très faibles
OS complet Oui Oui Non
Cas d'usage Windows, OS non-Linux, isolation forte Services Linux, microservices système Applications conteneurisées
Commande Proxmox qm pct

Machines Virtuelles QEMU/KVM — qm

Sur Proxmox VE, les machines virtuelles se gèrent via la commande qm (Qemu Manager). Les commandes s'exécutent sur l'hôte Proxmox en SSH ou en shell local.

a. Liste et Informations

  • Lister toutes les VMs :

    qm list
    

  • Afficher l'état d'une VM :

    qm status <VMID>
    

  • Voir la configuration complète d'une VM :

    qm config <VMID>
    

  • Voir les ressources consommées en temps réel :

    qm monitor <VMID>
    


b. Gestion de l'État des Machines Virtuelles

  • Démarrer une VM (lancer, allumer, booter) :

    qm start <VMID>
    

  • Arrêter une VM proprement (guest shutdown via ACPI) :

    qm shutdown <VMID>
    

  • Arrêter une VM brutalement (coupure secteur) :

    qm stop <VMID>
    

  • Redémarrer une VM (reboot) :

    qm reboot <VMID>
    

  • Réinitialiser une VM (reset matériel) :

    qm reset <VMID>
    

  • Suspendre une VM (RAM sur disque) :

    qm suspend <VMID>
    

  • Reprendre une VM suspendue :

    qm resume <VMID>
    

  • Déverrouiller une VM bloquée :

    qm unlock <VMID>
    


c. Configuration

  • Modifier une propriété de VM :

    qm set <VMID> --memory 4096    # RAM en Mo
    qm set <VMID> --cores 4        # Nombre de CPU
    qm set <VMID> --onboot 1       # Démarrage automatique au boot Proxmox
    

  • Éditer la configuration brute :

    nano /etc/pve/qemu-server/<VMID>.conf
    

  • Agrandir un disque :

    qm resize <VMID> scsi0 +20G
    

  • Accès console VM (terminal série) :

    qm terminal <VMID>
    

💡 Pour quitter le terminal série : Ctrl+O.


d. Snapshots VM

  • Créer un snapshot :

    qm snapshot <VMID> <nom-snapshot> --description "Description"
    

  • Lister les snapshots :

    qm listsnapshot <VMID>
    

  • Restaurer un snapshot :

    qm rollback <VMID> <nom-snapshot>
    

  • Supprimer un snapshot :

    qm delsnapshot <VMID> <nom-snapshot>
    


e. Clonage et Migration

  • Cloner une VM (clone lié) :

    qm clone <VMID-SOURCE> <VMID-DEST> --name <nom>
    

  • Cloner une VM (clone complet, indépendant) :

    qm clone <VMID-SOURCE> <VMID-DEST> --name <nom> --full
    

  • Migrer une VM vers un autre nœud Proxmox :

    qm migrate <VMID> <nœud-destination> --online
    

💡 --online effectue une migration à chaud (live migration) sans arrêter la VM.


f. Création et Suppression

  • Créer une VM (configuration minimale) :

    qm create <VMID> \
      --name <nom-vm> \
      --memory 2048 \
      --cores 2 \
      --net0 virtio,bridge=vmbr0 \
      --scsi0 local-lvm:32
    

  • Supprimer une VM (et ses disques) :

    qm destroy <VMID>
    

  • Supprimer une VM en conservant les disques :

    qm destroy <VMID> --purge 0
    


g. Sauvegarde et Restauration VM

  • Sauvegarder une VM (backup vzdump) :

    vzdump <VMID> --storage <storage> --mode snapshot
    

  • Restaurer une sauvegarde VM :

    qmrestore /var/lib/vz/dump/vzdump-qemu-<VMID>-*.vma.zst <NEW-VMID> --storage local-lvm
    


h. Agent QEMU

L'agent QEMU (qemu-guest-agent) doit être installé dans la VM pour que ces commandes fonctionnent.

  • Vérifier que l'agent répond :

    qm agent <VMID> ping
    

  • Obtenir les IPs de la VM :

    qm agent <VMID> network-get-interfaces
    

  • Exécuter une commande dans la VM via l'agent :

    qm agent <VMID> exec -- bash -c "uptime"
    


i. Cheatsheet VM (qm)

Action Commande
Lister les VMs qm list
État qm status <VMID>
Démarrer qm start <VMID>
Arrêt propre qm shutdown <VMID>
Arrêt brutal qm stop <VMID>
Redémarrer qm reboot <VMID>
Suspendre / Reprendre qm suspend <VMID> / qm resume <VMID>
Déverrouiller qm unlock <VMID>
Voir la config qm config <VMID>
Modifier une propriété qm set <VMID> --<option> <valeur>
Agrandir un disque qm resize <VMID> scsi0 +<taille>G
Créer un snapshot qm snapshot <VMID> <nom>
Restaurer un snapshot qm rollback <VMID> <nom>
Cloner (complet) qm clone <SRC> <DEST> --name <nom> --full
Migrer à chaud qm migrate <VMID> <nœud> --online
Créer une VM qm create <VMID> --name <nom> ...
Supprimer une VM qm destroy <VMID>
Backup vzdump <VMID> --storage <storage> --mode snapshot
IPs via guest agent qm agent <VMID> network-get-interfaces

Conteneurs LXC — pct

LXC (Linux Containers) est la technologie de conteneurisation au niveau OS intégrée dans Proxmox VE. Contrairement à Docker (isolation applicative), LXC émule un système Linux complet avec son propre init, ses services et ses utilisateurs.

Proxmox VE intègre LXC nativement via la commande pct. Chaque conteneur dispose de son propre filesystem (volume LVM ou ZFS), réseau et configuration.

Commandes essentielles

# Lister les conteneurs
pct list

# Démarrer / Arrêter / Redémarrer
pct start <CTID>
pct stop <CTID>
pct restart <CTID>

# Entrer dans un conteneur (console)
pct enter <CTID>

# Exécuter une commande sans entrer
pct exec <CTID> -- bash -c "commande"

# Copier un fichier vers le CT
pct push <CTID> /chemin/local /chemin/ct

# Copier un fichier depuis le CT
pct pull <CTID> /chemin/ct /chemin/local

Configuration

# Voir la config d'un CT
pct config <CTID>

# Modifier la RAM
pct set <CTID> --memory 1024

# Modifier le nombre de CPU
pct set <CTID> --cores 2

# Limiter l'usage CPU (en %)
pct set <CTID> --cpulimit 1.5

# Configurer l'interface réseau (modifier l'IP)
pct set <CTID> --net0 name=eth0,bridge=vmbr0,ip=192.168.1.50/24,gw=192.168.1.1

# Ajouter un disque données
pct set <CTID> --mp0 local-lvm:20,mp=/srv/data

# Activer le démarrage automatique
pct set <CTID> --onboot 1

Snapshots LXC

# Créer un snapshot
pct snapshot <CTID> nom-du-snapshot --description "Description"

# Lister les snapshots
pct listsnapshot <CTID>

# Restaurer un snapshot
pct rollback <CTID> nom-du-snapshot

# Supprimer un snapshot
pct delsnapshot <CTID> nom-du-snapshot

Accès au système de fichiers depuis l'hôte

# Monter le filesystem du CT sur l'hôte (CT doit être arrêté)
pct mount <CTID>
# Les fichiers sont accessibles dans /var/lib/lxc/<CTID>/rootfs/

# Démonter
pct umount <CTID>

Sauvegarde et restauration LXC

# Sauvegarder un CT (CT peut rester actif)
vzdump <CTID> --storage <storage> --mode snapshot

# Restaurer une sauvegarde
pct restore <CTID> /var/lib/vz/dump/vzdump-lxc-<CTID>-*.tar.zst --storage local-lvm

Conteneurs privilégiés vs non privilégiés

Type UID dans le CT UID sur l'hôte Sécurité
Privilégié root (0) root (0) Faible
Non privilégié root (0) 100000+ Élevée

Les conteneurs non privilégiés (--unprivileged 1) sont recommandés pour tous les services exposés.


Bonnes pratiques LXC

  • Toujours utiliser des conteneurs non privilégiés pour les services réseau
  • Utiliser un disque LVM dédié pour les données persistantes (séparé du rootfs)
  • Activer --onboot 1 pour le démarrage automatique
  • Utiliser pct snapshot avant toute mise à jour critique
  • Centraliser les scripts de déploiement dans un repo Git versionné

Exposer un service vers l'extérieur (NAT)

Rediriger un port externe de l'hôte Proxmox vers un port interne d'un conteneur :

iptables -t nat -A PREROUTING -p tcp --dport <PORT_EXTERNE> -j DNAT --to-destination <IP_CT>:<PORT_INTERNE>
iptables -I FORWARD -p tcp -d <IP_CT> --dport <PORT_INTERNE> -j ACCEPT
iptables-save > /etc/iptables.rules

Pour que ces règles survivent à un redémarrage, utiliser un hook réseau (/etc/network/if-pre-up.d/) qui exécute iptables-restore < /etc/iptables.rules.

Pour centraliser tous les domaines et le TLS plutôt que de gérer un NAT par service, voir le guide Caddy.


Conventions internes au conteneur

Convention Pourquoi
Un utilisateur système dédié par service Le service ne tourne jamais en root
Un service systemd avec Restart=always Redémarrage automatique après crash
Sauvegarde dans /backups/<service>/ sur l'hôte Protège contre la perte du conteneur lui-même

Guides d'installation LXC par service

Guides détaillés (création du conteneur, configuration, mise à jour) pour chaque service déployé en LXC :


Voir aussi