Aller au contenu principal

Conteneurs LXC/LXD


Table des matières

  1. Introduction aux conteneurs système
  2. Installation de LXD
  3. Gestion des conteneurs
  4. Images et profils
  5. Réseau et stockage
  6. Exercices pratiques


1 - Introduction aux conteneurs système

LXC vs Docker

AspectLXC/LXDDocker
TypeConteneur système completConteneur applicatif
Initsystemd/initPID 1 = application
ServicesMultiplesUn seul (idéalement)
UsageVM légèreMicroservices
ImagesOS completsLayers 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

ServeurURLContenu
ubuntu:cloud-images.ubuntu.comUbuntu officiel
images:images.linuxcontainers.orgMulti-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 nom pour créer un conteneur
  • lxc exec pour exécuter des commandes
  • Profils pour réutiliser des configurations
  • limits.cpu et limits.memory pour 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 →