Containerd
Mise à jour :
Containerd est un moteur de conteneurs léger, rapide et robuste, idéal pour gérer vos workloads en conteneurs. Initialement intégré à Docker, il est aujourd’hui un projet clé soutenu par la CNCF et parfaitement adapté à Kubernetes. Ce guide vous permettra d’apprendre à l’installer, le configurer et l’utiliser efficacement.
Un peu d’histoire
Containerd a vu le jour en 2015 comme un composant central de Docker, conçu pour gérer l’exécution et la supervision des conteneurs. À l’époque, Docker combinait plusieurs fonctionnalités : le build d’images, la gestion des conteneurs, et l’orchestration. Pour simplifier son architecture, Docker a choisi de découpler certaines de ces responsabilités, donnant naissance à containerd en tant que moteur dédié à la gestion des conteneurs.
En 2017, Docker a fait un pas décisif en transférant containerd à la Cloud Native Computing Foundation (CNCF). Cette décision a renforcé l’indépendance et l’adoption de containerd, le plaçant au centre de l’écosystème cloud-native. Depuis, il est devenu le runtime privilégié pour des outils comme Kubernetes, remplaçant l’ancien Docker-shim avec le support natif de l’interface CRI (Container Runtime Interface).
Aujourd’hui, containerd est utilisé par les principaux fournisseurs de services cloud et s’impose comme une référence incontournable dans la gestion des conteneurs grâce à sa stabilité et ses performances éprouvées. Une belle trajectoire pour un projet né dans l’ombre de Docker !
Quelles différences entre Docker et containerd ?
Bien que Docker et containerd soient souvent associés, leurs objectifs et fonctionnalités diffèrent sensiblement. Docker est une plateforme complète de gestion de conteneurs, regroupant des outils pour la création d’images, leur gestion, et leur orchestration. À l’inverse, containerd se concentre uniquement sur l’exécution des conteneurs, en servant de moteur minimaliste et performant.
Docker repose en grande partie sur containerd pour ses tâches d’exécution des conteneurs. Cependant, il y ajoute des fonctionnalités comme le build d’images avec Dockerfile, la gestion avancée des réseaux, et des outils comme Docker Compose pour orchestrer des applications multi-conteneurs. Docker vise à fournir une solution tout-en-un, accessible aux développeurs et facile à prendre en main.
De son côté, containerd est conçu pour être léger et modulaire, privilégiant l’intégration dans des environnements cloud-native comme Kubernetes. Son adoption massive s’explique notamment par son support natif de l’interface CRI (Container Runtime Interface), simplifiant son utilisation dans des clusters Kubernetes, où Docker est désormais déprécié.
Un autre point de divergence est l’interface utilisateur. Docker offre une CLI
riche et conviviale, tandis que containerd propose des outils minimalistes comme
ctr
ou nerdctl, principalement destinés aux administrateurs et
développeurs expérimentés.
En résumé, Docker est idéal pour démarrer avec les conteneurs ou pour des workflows complets, tandis que containerd s’adresse aux utilisateurs cherchant un runtime performant, modulaire, et parfaitement adapté à l’écosystème cloud-native.
Fonctionnalités principales de containerd
Voici les fonctionnalités clés qui font de containerd un outil puissant pour la gestion des conteneurs :
- Support des spécifications OCI Compatible avec les images et runtime conformes aux normes OCI (Open Container Initiative), garantissant une interopérabilité maximale.
- Gestion des images conteneurs Permet le téléchargement, la gestion et
l’exécution d’images via des outils comme
ctr
,crictl
ounerdctl
. - Interface CRI intégrée Fournit un support natif pour Kubernetes, simplifiant l’intégration comme runtime des nœuds.
- Snapshots efficaces Gère les systèmes de fichiers avec des snapshots performants pour des performances optimales et une meilleure isolation des conteneurs.
- Modularité Un design minimaliste et modulaire, permettant une intégration facile avec des outils tiers.
- Support multi-plateforme Fonctionne sur les architectures Linux (amd64, arm64) et Windows.
- Extensibilité Possède une API gRPC permettant aux développeurs de créer des outils personnalisés pour interagir avec le moteur.
- Léger et performant Conçu pour exécuter des workloads conteneurs avec un faible overhead.
Installation de containerd
L’installation de containerd dépend de vos besoins. Si vous cherchez à simplement exécuter des conteneurs localement, vous pouvez installer containerd seul.
Desinstallation de Docker
Si vous souhaitez basculer de Docker à containerd couplé à nerdctl, voici un guide détaillé pour une transition propre. Nous allons commencer par désinstaller complètement Docker, puis ré-installer containerd.io et nerdctl.
Avant tout, supprimons Docker, ainsi que les conteneurs, images et volumes associés.
-
Arrêtez et désinstallez Docker :
Terminal window sudo systemctl stop dockersudo systemctl stop docker.socketsudo apt purge -y docker-ce docker-ce-cli containerd.iosudo apt autoremove -y -
Supprimez les fichiers de configuration et les données Docker :
Terminal window sudo rm -rf /var/lib/dockersudo rm -rf /etc/dockersudo rm -rf /var/lib/containerdsudo rm -rf /var/run/docker.sock -
Vérifiez que Docker n’est plus installé :
Terminal window docker --version # Cela devrait renvoyer une erreur.
Installation de containerd.io
containerd est le moteur de conteneurs utilisé par nerdctl. Suivez ces étapes pour l’installer :
-
Installez les prérequis :
Terminal window sudo apt updatesudo apt install -y ca-certificates curl gnupg lsb-release -
Ajoutez le dépôt Docker (qui contient containerd.io) :
Terminal window sudo mkdir -p /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt update -
Installez containerd.io :
Terminal window sudo apt install -y containerd.io uidmap -
Configurez containerd pour qu’il utilise runc :
Terminal window sudo mkdir -p /etc/containerdcontainerd config default | sudo tee /etc/containerd/config.tomlsudo systemctl restart containerd
Installation de buildkit
nerdctl utilise buildkit pour la construction d’images. Voici comment l’installer :
VERSION=v$(curl -s https://api.github.com/repos/moby/buildkit/releases/latest | grep tag_name | cut -d '"' -f 4| sed 's/^v//')wget https://github.com/moby/buildkit/releases/download/${VERSION}/buildkit-${VERSION}.linux-amd64.tar.gzsudo tar -xvf buildkit-${VERSION}.linux-amd64.tar.gz -C /usr/local/containerd-rootless-setuptool.sh install-buildkit
Installation des plugins CNI
Pour gérer les réseaux de conteneurs, vous aurez besoin de plugins CNI. Voici comment les installer :
sudo apt install docker-ce-rootless-extraswget https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgzsudo mkdir -p /opt/cni/binsudo tar -xvf cni-plugins-linux-amd64-v1.6.2.tgz -C /opt/cni/bincontainerd-rootless-setuptool.sh install
Configuration de containerd
La configuration de containerd est définie dans un fichier config.toml
.
Par défaut, ce fichier est situé dans /etc/containerd/config.toml
. Cette
configuration contrôle divers aspects, comme le chemin des sockets, les plugins
activés ou désactivés, et les options réseau.
Voici une explication détaillée d’une configuration typique installé avec docker :
disabled_plugins = ["cri"]
#root = "/var/lib/containerd"#state = "/run/containerd"#subreaper = true#oom_score = 0
#[grpc]# address = "/run/containerd/containerd.sock"# uid = 0# gid = 0
#[debug]# address = "/run/containerd/debug.sock"# uid = 0# gid = 0# level = "info"
disabled_plugins = ["cri"]
- Ce paramètre désactive le plugin CRI (Container Runtime Interface) utilisé pour intégrer containerd avec Kubernetes.
Personnalisation et activation
-
Générer un fichier de configuration par défaut : Si le fichier
config.toml
n’existe pas, générez-le :Terminal window sudo containerd config default > /etc/containerd/config.toml -
Modifier le fichier : Éditez le fichier avec votre éditeur préféré :
Terminal window sudo nano /etc/containerd/config.toml -
Redémarrer le service :
Après toute modification, redémarrez containerd pour appliquer les changements :
Terminal window sudo systemctl restart containerd
En ajustant cette configuration selon vos besoins, vous pouvez optimiser containerd pour votre environnement, qu’il s’agisse d’une utilisation en standalone ou intégré dans un cluster Kubernetes. 😊
Utilisation de la CLI ctr
La commande ctr
est l’outil CLI natif fourni avec containerd. Bien
qu’il soit principalement conçu pour le débogage et les tests, ctr
offre un
accès direct et granulaire à toutes les fonctionnalités de containerd. Ce
n’est pas l’outil recommandé pour une utilisation en production, mais il reste
essentiel pour les administrateurs systèmes et les développeurs souhaitant
explorer ou interagir directement avec containerd.
- Lister les namespaces disponibles : Vérifiez quels namespaces existent sur votre instance de containerd :
sudo ctr namespace listmoby
Si vous voyez moby
, cela signifie que Docker utilise ce namespace pour ses
conteneurs.
- Lister les conteneurs actifs : Dans le namespace
default
, affichez les conteneurs actuellement en cours d’exécution :
sudo ctr containers list
Dans un autre namespace (par exemple, moby
) :
sudo ctr --namespace moby containers list
- Télécharger une image : Pour récupérer une image depuis un registre Docker :
sudo ctr images pull docker.io/library/redis:alpine
- Lister les images disponibles :
Affichez les images déjà téléchargées :
sudo ctr images list
- Lancer un conteneur interactif : Pour exécuter un conteneur à partir d’une image :
sudo ctr run --rm -t docker.io/library/redis:alpine my-redis
Explications :
--rm
: supprime le conteneur après l’exécution.-t
: lance un terminal interactif.my-redis
: nom du conteneur.
- Supprimer une image : Pour supprimer une image inutilisée :
sudo ctr images remove docker.io/library/redis:alpine
-
Inspecter un conteneur : Pour obtenir les métadonnées d’un conteneur :
Terminal window sudo ctr containers info <CONTAINER_ID>
Conclusion
Containerd est un moteur léger et performant, essentiel dans l’écosystème des conteneurs. Que ce soit en standalone ou intégré à Docker et Kubernetes, il s’adapte à vos besoins grâce à sa modularité et ses fonctionnalités avancées.
Simple à configurer et puissant à utiliser, il constitue un atout majeur pour gérer vos workloads conteneurs avec fiabilité. Avec containerd, vous êtes prêt à optimiser vos environnements modernes en toute simplicité. 🚀