containerd
Runtime de conteneurs léger et performant, composant central de l'écosystème Docker et standard industriel pour l'orchestration Kubernetes.
Mis à jour le 28 janvier 2026
containerd est un runtime de conteneurs de niveau industriel qui gère le cycle de vie complet des conteneurs sur un système hôte. Extrait de Docker en 2016 et donné à la Cloud Native Computing Foundation (CNCF), il s'est imposé comme le standard de facto pour l'exécution de conteneurs dans les environnements de production. containerd fournit une interface minimaliste et performante pour l'orchestration de conteneurs, utilisée par Kubernetes, Docker et de nombreuses autres plateformes.
Fondements techniques
- Architecture modulaire avec séparation entre gestion de conteneurs et exécution runtime (runc/kata)
- Implémentation complète de la spécification OCI (Open Container Initiative) garantissant l'interopérabilité
- Gestion du stockage d'images via snapshotter avec support overlay, btrfs, ZFS et devicemapper
- Interface gRPC permettant l'intégration avec orchestrateurs et outils de monitoring
Avantages stratégiques
- Performance optimale avec une empreinte mémoire réduite (~10x moins que Docker complet)
- Stabilité accrue grâce à une surface d'attaque minimale et un code simplifié
- Standardisation via CNCF garantissant pérennité et support communautaire
- Compatibilité native avec Kubernetes via l'interface CRI (Container Runtime Interface)
- Isolation renforcée avec support multi-tenant et contrôle granulaire des ressources
Exemple d'utilisation avec ctr
# Télécharger une image depuis un registre
sudo ctr image pull docker.io/library/nginx:alpine
# Lister les images disponibles
sudo ctr images ls
# Créer et démarrer un conteneur
sudo ctr run --rm -t \
--mount type=bind,src=/app,dst=/usr/share/nginx/html,options=rbind:ro \
docker.io/library/nginx:alpine nginx-app
# Lister les conteneurs actifs
sudo ctr containers ls
# Inspecter un conteneur
sudo ctr containers info nginx-app
# Exécuter une commande dans le conteneur
sudo ctr task exec --exec-id shell nginx-app /bin/shConfiguration avec Kubernetes
version = 2
[plugins."io.containerd.grpc.v1.cri"]
# Activer le CRI pour Kubernetes
disable_tcp_service = true
stream_server_address = "127.0.0.1"
stream_server_port = "0"
enable_selinux = false
sandbox_image = "registry.k8s.io/pause:3.9"
[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "overlayfs"
default_runtime_name = "runc"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d"
[plugins."io.containerd.grpc.v1.cri".cni]
bin_dir = "/opt/cni/bin"
conf_dir = "/etc/cni/net.d"Mise en œuvre en production
- Installation via gestionnaire de paquets ou binaire officiel depuis GitHub releases
- Configuration du fichier /etc/containerd/config.toml selon vos besoins (registries, plugins, runtimes)
- Activation du service systemd et configuration du démarrage automatique
- Intégration avec l'orchestrateur (Kubernetes via kubeadm ou configuration CRI-O)
- Configuration du réseau CNI (Calico, Flannel, Cilium) pour la communication inter-pods
- Mise en place de la télémétrie avec Prometheus et intégration des métriques containerd
- Configuration des snapshotter selon votre système de fichiers pour optimiser les performances
Conseil de production
Pour Kubernetes en production, privilégiez systemd comme gestionnaire de cgroups (SystemdCgroup = true) pour une meilleure intégration avec le système. Configurez également des limites de ressources via les plugins pour éviter l'épuisement du système hôte. Activez le garbage collector automatique d'images avec des seuils appropriés pour optimiser l'espace disque.
Écosystème et outils complémentaires
- nerdctl : CLI Docker-compatible pour containerd avec support Compose
- crictl : outil de débogage pour l'interface CRI Kubernetes
- BuildKit : moteur de build d'images intégré supportant les caches distribués
- Stargz Snapshotter : plugin pour lazy-pulling des images conteneurs
- Kata Containers : runtime alternatif pour isolation renforcée via micro-VMs
- gVisor : sandbox applicatif pour sécurité accrue des workloads
Architecture et intégration système
containerd s'appuie sur une architecture en couches où chaque composant a une responsabilité précise. Le daemon principal communique via gRPC et délègue l'exécution réelle à des runtimes OCI comme runc. Le système de snapshots permet des opérations copy-on-write efficaces, réduisant drastiquement l'utilisation du stockage. L'intégration avec les namespaces Linux (PID, network, mount, IPC) assure l'isolation des conteneurs tandis que les cgroups contrôlent l'allocation des ressources CPU, mémoire et I/O.
Performance et optimisation
containerd offre des performances supérieures grâce à son architecture épurée : temps de démarrage des conteneurs réduit de 40% par rapport à Docker complet, utilisation mémoire divisée par 10, et latence API inférieure à 5ms. Pour les clusters Kubernetes de grande taille, cette efficacité se traduit par une réduction significative de la charge système et des coûts d'infrastructure.
Sécurité et isolation
La sécurité de containerd repose sur plusieurs mécanismes : support natif de SELinux et AppArmor, intégration avec seccomp pour filtrer les appels système, et architecture rootless en option. Le runtime peut être configuré pour utiliser des namespaces utilisateurs (user namespaces) permettant de mapper root dans le conteneur vers un utilisateur non privilégié sur l'hôte. Pour les workloads sensibles, l'intégration avec Kata Containers ou gVisor ajoute une couche d'isolation supplémentaire via virtualisation légère.
En tant que composant central des infrastructures cloud-native modernes, containerd représente un investissement stratégique pour toute organisation migrant vers des architectures microservices. Sa standardisation par la CNCF, ses performances optimales et son adoption massive dans l'industrie en font un choix pérenne pour l'orchestration de conteneurs à grande échelle. Les entreprises utilisant Kubernetes bénéficient automatiquement de ses capacités sans configuration complexe, tout en conservant la flexibilité d'adapter le runtime selon leurs contraintes de sécurité et de performance.

