Conteneurs LXC/LXD
Table des matières
- Introduction aux conteneurs système
- Installation de LXD
- Gestion des conteneurs
- Images et profils
- Réseau et stockage
- Exercices pratiques
1 - Introduction aux conteneurs système
LXC vs Docker
| Aspect | LXC/LXD | Docker |
|---|---|---|
| Type | Conteneur système complet | Conteneur applicatif |
| Init | systemd/init | PID 1 = application |
| Services | Multiples | Un seul (idéalement) |
| Usage | VM légère | Microservices |
| Images | OS complets | Layers applicatifs |
Cas d'utilisation LXC/LXD
- Environnements de développement isolés
- Migration depuis des VMs
- Tests multi-distributions
- Isolation de services traditionnels
🔝 Retour à la table des matières
2 - Installation de LXD
Installation via snap (recommandé)
# Ubuntu/Debian avec snap
snap install lxd
# Ajouter l'utilisateur au groupe
usermod -aG lxd $USER
newgrp lxd
Initialisation
# Configuration interactive
lxd init
# Réponses typiques:
# - Clustering: no
# - Storage backend: dir (ou zfs, btrfs)
# - Network: yes, default bridge
# - Remote access: no
# - Auto-update images: yes
Configuration automatique
# Configuration via preseed
cat <<EOF | lxd init --preseed
config: {}
networks:
- config:
ipv4.address: 10.10.10.1/24
ipv4.nat: "true"
ipv6.address: none
description: ""
name: lxdbr0
type: bridge
storage_pools:
- config: {}
description: ""
name: default
driver: dir
profiles:
- config: {}
description: ""
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: /
pool: default
type: disk
name: default
EOF
Vérification
# Statut
lxc version
lxd --version
# Info système
lxc info
# Lister les conteneurs
lxc list
🔝 Retour à la table des matières
3 - Gestion des conteneurs
Créer et lancer
# Créer et démarrer
lxc launch ubuntu:22.04 mycontainer
# Créer sans démarrer
lxc init ubuntu:22.04 mycontainer
# Depuis une image spécifique
lxc launch images:debian/12 debian-container
lxc launch images:alpine/3.18 alpine-container
Commandes de base
# Lister
lxc list
lxc list --columns "ns46tS"
# Démarrer/Arrêter
lxc start mycontainer
lxc stop mycontainer
lxc restart mycontainer
# Forcer l'arrêt
lxc stop mycontainer --force
# Supprimer
lxc delete mycontainer
lxc delete mycontainer --force # Si running
Accès aux conteneurs
# Shell interactif
lxc exec mycontainer -- bash
lxc exec mycontainer -- /bin/sh
# Exécuter une commande
lxc exec mycontainer -- apt update
lxc exec mycontainer -- cat /etc/os-release
# En tant qu'utilisateur spécifique
lxc exec mycontainer -- su - username
Transfert de fichiers
# Push (local → conteneur)
lxc file push local-file.txt mycontainer/root/
# Pull (conteneur → local)
lxc file pull mycontainer/etc/passwd ./
# Éditer directement
lxc file edit mycontainer/etc/hosts
Informations
# Infos détaillées
lxc info mycontainer
# Configuration
lxc config show mycontainer
# Ressources utilisées
lxc info mycontainer --resources
Snapshots
# Créer
lxc snapshot mycontainer snap1
# Lister
lxc info mycontainer # Section Snapshots
# Restaurer
lxc restore mycontainer snap1
# Supprimer
lxc delete mycontainer/snap1
🔝 Retour à la table des matières
4 - Images et profils
Gestion des images
# Lister les images locales
lxc image list
# Chercher des images distantes
lxc image list images: debian
lxc image list ubuntu:
# Télécharger une image
lxc image copy ubuntu:22.04 local: --alias ubuntu22
# Infos sur une image
lxc image info ubuntu22
# Supprimer
lxc image delete ubuntu22
# Créer une image depuis un conteneur
lxc publish mycontainer --alias my-custom-image
Serveurs d'images
| Serveur | URL | Contenu |
|---|---|---|
ubuntu: | cloud-images.ubuntu.com | Ubuntu officiel |
images: | images.linuxcontainers.org | Multi-distros |
Profils
# Lister les profils
lxc profile list
# Voir un profil
lxc profile show default
# Créer un profil
lxc profile create myprofile
# Éditer
lxc profile edit myprofile
# Appliquer à un conteneur
lxc profile add mycontainer myprofile
lxc launch ubuntu:22.04 myc --profile default --profile myprofile
Exemple de profil
# lxc profile edit myprofile
config:
limits.cpu: "2"
limits.memory: 2GB
description: Profil avec limites CPU et RAM
devices:
root:
path: /
pool: default
size: 10GB
type: disk
eth0:
name: eth0
network: lxdbr0
type: nic
name: myprofile
Limites de ressources
# CPU
lxc config set mycontainer limits.cpu 2
# Mémoire
lxc config set mycontainer limits.memory 2GB
# Disque (avec profile ou device)
lxc config device set mycontainer root size=20GB
🔝 Retour à la table des matières
5 - Réseau et stockage
Réseaux
# Lister les réseaux
lxc network list
# Créer un réseau bridge
lxc network create mybr0 ipv4.address=10.20.30.1/24 ipv4.nat=true
# Attacher à un conteneur
lxc network attach mybr0 mycontainer eth1
# Configuration du conteneur
lxc config device add mycontainer eth1 nic network=mybr0
IP statique
# Via config
lxc config device override mycontainer eth0 ipv4.address=10.10.10.100
# Ou dans le conteneur
lxc exec mycontainer -- bash
# Configurer via netplan ou /etc/network/interfaces
Pools de stockage
# Lister les pools
lxc storage list
# Créer un pool ZFS
lxc storage create mypool zfs
# Créer un pool dir
lxc storage create dirpool dir source=/data/lxd
# Utiliser le pool
lxc launch ubuntu:22.04 myc --storage mypool
Volumes de stockage
# Créer un volume
lxc storage volume create default myvolume
# Attacher à un conteneur
lxc config device add mycontainer data disk pool=default source=myvolume path=/data
# Lister
lxc storage volume list default
# Copier un volume
lxc storage volume copy default/myvolume default/myvolume-backup
Montages depuis l'hôte
# Monter un répertoire
lxc config device add mycontainer shared disk source=/home/user/shared path=/shared
# Supprimer le montage
lxc config device remove mycontainer shared
🔝 Retour à la table des matières
6 - Exercices pratiques
Exercice 1 : Conteneur web
Créez un conteneur Ubuntu avec Nginx installé :
Solution
# Créer le conteneur
lxc launch ubuntu:22.04 webserver
# Installer nginx
lxc exec webserver -- apt update
lxc exec webserver -- apt install -y nginx
# Vérifier
lxc exec webserver -- systemctl status nginx
# Obtenir l'IP
lxc list webserver
Exercice 2 : Limites de ressources
Créez un conteneur limité à 1 CPU et 512MB de RAM :
Solution
# Méthode 1 : à la création
lxc launch ubuntu:22.04 limited -c limits.cpu=1 -c limits.memory=512MB
# Méthode 2 : après création
lxc launch ubuntu:22.04 limited
lxc config set limited limits.cpu 1
lxc config set limited limits.memory 512MB
# Vérifier
lxc config show limited
Quiz
Q1. Quelle commande permet d'accéder au shell d'un conteneur ?
Réponse
lxc exec nom-conteneur -- bash
Q2. Quelle est la différence principale entre LXC et Docker ?
Réponse
LXC fournit des conteneurs système complets (comme des VMs légères avec init), tandis que Docker fournit des conteneurs applicatifs (un processus par conteneur).
🔝 Retour à la table des matières
Points clés à retenir
- LXC/LXD = conteneurs système (VMs légères)
lxc launch image nompour créer un conteneurlxc execpour exécuter des commandes- Profils pour réutiliser des configurations
limits.cpuetlimits.memorypour les ressources- Snapshots pour sauvegarder l'état
- Volumes pour le stockage persistant
🔝 Retour à la table des matières
← Chapitre précédent | Chapitre suivant : Automatisation avancée →