
nerdctl est une CLI pour containerd qui offre une compatibilité complète avec les commandes Docker. Vous pouvez exécuter des conteneurs, construire des images et utiliser Compose sans Docker — tout en bénéficiant de fonctionnalités avancées comme le lazy pulling, le chiffrement d’images et les checkpoints.
Ce guide couvre l’installation de nerdctl v2.2, les commandes essentielles testées, la gestion des réseaux et volumes, ainsi que les fonctionnalités avancées v2.x. Prérequis : containerd installé et fonctionnel.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Installer nerdctl sur Linux (binaire ou bundle complet)
- Utiliser les commandes de base : run, ps, logs, exec, inspect
- Gérer réseaux et volumes personnalisés
- Utiliser Compose pour les applications multi-conteneurs
- Exploiter les fonctionnalités v2.x : checkpoint, manifest, stats
Pourquoi choisir nerdctl plutôt que Docker ?
Section intitulée « Pourquoi choisir nerdctl plutôt que Docker ? »| Critère | Docker | nerdctl |
|---|---|---|
| Daemon | dockerd obligatoire | containerd uniquement |
| Licence | Docker Desktop payant (entreprises) | 100% open source (Apache 2.0) |
| Lazy pulling | Non natif | Stargz, Nydus, OverlayBD, SOCI |
| Images chiffrées | Non | ocicrypt intégré |
| Distribution P2P | Non | IPFS natif |
| Checkpoints | Expérimental | Support CRIU stable |
| Mode rootless | Complexe | bypass4netns optimisé |
nerdctl n’est pas un fork de Docker — c’est un outil natif pour containerd qui reprend la syntaxe Docker pour faciliter l’adoption.
Installation
Section intitulée « Installation »nerdctl propose deux méthodes d’installation : le binaire seul (si containerd est déjà installé) ou le bundle complet (containerd + BuildKit + CNI plugins inclus).
Cette méthode suppose que containerd est déjà installé et fonctionnel.
-
Télécharger la dernière version
Fenêtre de terminal VERSION="2.2.1"wget https://github.com/containerd/nerdctl/releases/download/v${VERSION}/nerdctl-${VERSION}-linux-amd64.tar.gz -
Installer le binaire
Fenêtre de terminal sudo tar -xvf nerdctl-${VERSION}-linux-amd64.tar.gz -C /usr/local/binsudo chmod +x /usr/local/bin/nerdctl -
Vérifier l’installation
Fenêtre de terminal nerdctl --versionRésultat attendu :
nerdctl version 2.2.1
Le bundle nerdctl-full inclut containerd, runc, CNI plugins et BuildKit — idéal pour une installation complète.
-
Télécharger le bundle
Fenêtre de terminal VERSION="2.2.1"wget https://github.com/containerd/nerdctl/releases/download/v${VERSION}/nerdctl-full-${VERSION}-linux-amd64.tar.gz -
Extraire dans /usr/local
Fenêtre de terminal sudo tar -xvf nerdctl-full-${VERSION}-linux-amd64.tar.gz -C /usr/local -
Activer et démarrer containerd
Fenêtre de terminal sudo systemctl enable --now containerdsudo systemctl enable --now buildkit -
Vérifier l’installation
Fenêtre de terminal nerdctl --versioncontainerd --version
Vérifier la configuration
Section intitulée « Vérifier la configuration »Après l’installation, vérifiez que nerdctl communique correctement avec containerd :
sudo nerdctl infoRésultat attendu :
Client: Namespace: default Debug Mode: false
Server: Server Version: v2.2.1 Storage Driver: overlayfs Cgroup Driver: systemd Cgroup Version: 2 Kernel Version: 6.8.0-100-generic Operating System: Ubuntu 24.04.2 LTS CPUs: 16 Total Memory: 46.83GiBCommandes essentielles
Section intitulée « Commandes essentielles »nerdctl reprend la syntaxe Docker. Voici les commandes de base testées avec sorties réelles.
Exécuter un conteneur
Section intitulée « Exécuter un conteneur »# Conteneur éphémère (--rm)sudo nerdctl run --rm alpine:3.19 cat /etc/os-releaseRésultat :
NAME="Alpine Linux"VERSION_ID=3.19.9PRETTY_NAME="Alpine Linux v3.19"HOME_URL="https://alpinelinux.org/"Lancer un conteneur en arrière-plan
Section intitulée « Lancer un conteneur en arrière-plan »# Nginx sur le port 8080sudo nerdctl run -d --name mon-nginx -p 8080:80 nginx:alpineRésultat :
234f3562467bd41fe58d0ece451bb2ff479d25fb9c4e740e513a38a58cd2c3e2Lister les conteneurs
Section intitulée « Lister les conteneurs »sudo nerdctl psRésultat :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES234f3562467b docker.io/library/nginx:alpine "/docker-entrypoint.…" 5 minutes ago Up 0.0.0.0:8080->80/tcp mon-nginxAjoutez -a pour voir aussi les conteneurs arrêtés.
Consulter les logs
Section intitulée « Consulter les logs »sudo nerdctl logs mon-nginx | tail -5Résultat :
2026/02/13 07:10:47 [notice] 1#1: nginx/1.29.52026/02/13 07:10:47 [notice] 1#1: built by gcc 15.2.0 (Alpine 15.2.0)2026/02/13 07:10:47 [notice] 1#1: OS: Linux 6.8.0-100-generic2026/02/13 07:10:47 [notice] 1#1: start worker processes/docker-entrypoint.sh: Configuration complete; ready for start upExécuter une commande dans un conteneur
Section intitulée « Exécuter une commande dans un conteneur »sudo nerdctl exec mon-nginx cat /etc/nginx/nginx.conf | head -10Résultat :
user nginx;worker_processes auto;
error_log /var/log/nginx/error.log notice;pid /run/nginx.pid;
events { worker_connections 1024;}Inspecter un conteneur
Section intitulée « Inspecter un conteneur »sudo nerdctl inspect mon-nginx --format '{{.State.Status}} - {{.NetworkSettings.IPAddress}}'Résultat :
running - 10.4.0.3Arrêter et supprimer un conteneur
Section intitulée « Arrêter et supprimer un conteneur »sudo nerdctl stop mon-nginxsudo nerdctl rm mon-nginxStatistiques en temps réel
Section intitulée « Statistiques en temps réel »sudo nerdctl stats --no-streamRésultat :
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS234f3562467b mon-nginx 0.00% 12.85MiB / 46.83GiB 0.03% 1.45kB / 822B 0B / 20.5kB 17Voir les processus d’un conteneur
Section intitulée « Voir les processus d’un conteneur »sudo nerdctl top mon-nginxRésultat :
UID PID PPID CMDroot 3777377 3777339 nginx: master process nginx -g daemon off;message+ 3777625 3777377 nginx: worker processGestion des images
Section intitulée « Gestion des images »Télécharger une image
Section intitulée « Télécharger une image »sudo nerdctl pull alpine:3.19Lister les images
Section intitulée « Lister les images »sudo nerdctl imagesRésultat :
REPOSITORY TAG IMAGE ID CREATED PLATFORM SIZE BLOB SIZEalpine 3.19 6baf43584bcb 2 weeks ago linux/amd64 8.081MB 3.421MBnginx alpine b76de378d572 2 weeks ago linux/amd64 47.01MB 18.08MBSupprimer une image
Section intitulée « Supprimer une image »sudo nerdctl rmi alpine:3.19Construire une image (nécessite BuildKit)
Section intitulée « Construire une image (nécessite BuildKit) »# Créer un Dockerfile simplecat > /tmp/Dockerfile << 'EOF'FROM alpine:3.19RUN apk add --no-cache curlCMD ["echo", "Hello from nerdctl!"]EOF
# Construire l'imagesudo nerdctl build -t mon-image:v1 /tmpGestion des réseaux
Section intitulée « Gestion des réseaux »Créer un réseau personnalisé
Section intitulée « Créer un réseau personnalisé »sudo nerdctl network create mon-reseau --subnet 172.28.0.0/24Résultat :
b047bfb73f50a1a7ff26f4264e82dd94d43096fa70c48a1bdf5b67cf4188ab52Lister les réseaux
Section intitulée « Lister les réseaux »sudo nerdctl network lsRésultat :
NETWORK ID NAME FILE containerd-net /etc/cni/net.d/10-containerd-net.conflistb047bfb73f50 mon-reseau /etc/cni/net.d/default/nerdctl-mon-reseau.conflist17f29b073143 bridge /etc/cni/net.d/nerdctl-bridge.conflist host noneConnecter un conteneur à un réseau
Section intitulée « Connecter un conteneur à un réseau »sudo nerdctl run -d --name app --network mon-reseau nginx:alpineSupprimer un réseau
Section intitulée « Supprimer un réseau »sudo nerdctl network rm mon-reseauGestion des volumes
Section intitulée « Gestion des volumes »Créer un volume
Section intitulée « Créer un volume »sudo nerdctl volume create mes-donneesLister les volumes
Section intitulée « Lister les volumes »sudo nerdctl volume lsRésultat :
VOLUME NAME DIRECTORYmes-donnees /var/lib/nerdctl/1935db59/volumes/default/mes-donnees/_dataUtiliser un volume
Section intitulée « Utiliser un volume »sudo nerdctl run -d --name db -v mes-donnees:/data redis:alpineSupprimer un volume
Section intitulée « Supprimer un volume »sudo nerdctl volume rm mes-donneesUtilisation de Compose
Section intitulée « Utilisation de Compose »nerdctl intègre une compatibilité native avec Docker Compose. Pas besoin d’installer docker-compose.
Créer un fichier compose.yaml
Section intitulée « Créer un fichier compose.yaml »services: web: image: nginx:alpine ports: - "8889:80" redis: image: redis:alpineDémarrer l’application
Section intitulée « Démarrer l’application »sudo nerdctl compose up -dRésultat :
INFO[0000] Creating network myapp_defaultINFO[0000] Ensuring image redis:alpineINFO[0005] Ensuring image nginx:alpineINFO[0005] Creating container myapp-redis-1INFO[0005] Creating container myapp-web-1Voir l’état des services
Section intitulée « Voir l’état des services »sudo nerdctl compose psRésultat :
NAME IMAGE COMMAND SERVICE STATUS PORTSmyapp-web-1 docker.io/library/nginx:alpine "/docker-entrypoint.…" web running 0.0.0.0:8889->80/tcpmyapp-redis-1 docker.io/library/redis:alpine "docker-entrypoint.s…" redis runningArrêter et supprimer
Section intitulée « Arrêter et supprimer »# Arrêter les servicessudo nerdctl compose down
# Avec suppression des volumessudo nerdctl compose down -vFonctionnalités avancées v2.x
Section intitulée « Fonctionnalités avancées v2.x »Checkpoints de conteneurs (v2.2)
Section intitulée « Checkpoints de conteneurs (v2.2) »Les checkpoints permettent de sauvegarder l’état d’un conteneur en cours d’exécution pour le restaurer plus tard. Utile pour la migration ou le debugging.
# Créer un checkpointsudo nerdctl checkpoint create mon-conteneur checkpoint-1
# Lister les checkpointssudo nerdctl checkpoint ls mon-conteneur
# Supprimer un checkpointsudo nerdctl checkpoint rm mon-conteneur checkpoint-1Gestion des manifests multi-arch (v2.1.4)
Section intitulée « Gestion des manifests multi-arch (v2.1.4) »Créez et gérez des images multi-architecture :
# Créer un manifestsudo nerdctl manifest create mon-image:latest \ mon-image:amd64 \ mon-image:arm64
# Inspecter un manifestsudo nerdctl manifest inspect mon-image:latest
# Pousser vers un registresudo nerdctl manifest push mon-image:latest
# Supprimer un manifest localsudo nerdctl manifest rm mon-image:latestExport et import de conteneurs (v2.1.4)
Section intitulée « Export et import de conteneurs (v2.1.4) »# Exporter un conteneur vers une archivesudo nerdctl container export mon-conteneur > conteneur.tar
# Importer comme imagesudo nerdctl image import conteneur.tar mon-image:importedMode rootless
Section intitulée « Mode rootless »Exécutez des conteneurs sans privilèges root pour une sécurité renforcée.
-
Installer les prérequis
Fenêtre de terminal sudo apt install uidmap rootlesskit -
Configurer containerd en mode rootless
Fenêtre de terminal containerd-rootless-setuptool.sh install -
Utiliser nerdctl sans sudo
Fenêtre de terminal nerdctl run --rm alpine:3.19 echo "Hello rootless!"
Lazy pulling (téléchargement différé)
Section intitulée « Lazy pulling (téléchargement différé) »Le lazy pulling permet de démarrer un conteneur avant que l’image soit entièrement téléchargée. Idéal pour les images volumineuses.
Snaphotters supportés :
- Stargz : format eStargz optimisé
- Nydus : accélérateur d’images cloud-native
- OverlayBD : couche block-device
- SOCI : Seekable OCI (Amazon)
# Utiliser le snapshotter stargzsudo nerdctl --snapshotter stargz run ghcr.io/stargz-containers/nginx:1.23-esgzDistribution d’images via IPFS
Section intitulée « Distribution d’images via IPFS »Partagez des images en peer-to-peer sans registre central :
# Pousser une image vers IPFSsudo nerdctl push ipfs://mon-image:latest
# Exécuter depuis IPFSsudo nerdctl run ipfs://<CID>Signature d’images avec Cosign
Section intitulée « Signature d’images avec Cosign »Signez et vérifiez vos images pour garantir leur intégrité :
# Signer lors du pushsudo nerdctl push --sign=cosign mon-registre/mon-image:latest
# Vérifier lors du pullsudo nerdctl pull --verify=cosign mon-registre/mon-image:latestVoir le guide Cosign pour la configuration complète.
Dépannage
Section intitulée « Dépannage »| Problème | Cause probable | Solution |
|---|---|---|
permission denied | Pas les droits root | Utiliser sudo ou configurer rootless |
failed to ping buildkitd | BuildKit non démarré | sudo systemctl start buildkit |
network not found | Réseau supprimé ou inexistant | nerdctl network ls puis recréer |
image not found | Image non présente localement | nerdctl pull image:tag |
container already exists | Nom de conteneur déjà utilisé | nerdctl rm nom ou choisir un autre nom |
cgroup driver mismatch | containerd/kubelet mal configurés | Aligner les drivers cgroup |
Commandes de diagnostic
Section intitulée « Commandes de diagnostic »# Vérifier l'état de containerdsudo systemctl status containerd
# Voir les logs containerdsudo journalctl -u containerd -f
# Vérifier la configuration nerdctlsudo nerdctl info
# Nettoyer les ressources inutiliséessudo nerdctl system prune -aBonnes pratiques
Section intitulée « Bonnes pratiques »Sécurité
Section intitulée « Sécurité »- Privilégiez le mode rootless pour les environnements de développement
- Signez vos images avec Cosign avant de les déployer
- Limitez les capacités avec
--cap-drop=ALL --cap-add=<nécessaire> - Utilisez des images chiffrées pour les données sensibles
Organisation
Section intitulée « Organisation »- Nommez vos conteneurs avec
--namepour faciliter la gestion - Utilisez des réseaux personnalisés pour isoler les applications
- Préférez les volumes nommés aux bind mounts pour les données persistantes
- Tagguez vos images avec des versions précises (pas
latest)
Performance
Section intitulée « Performance »- Activez le lazy pulling pour les grandes images
- Utilisez le cache BuildKit pour accélérer les builds
- Configurez les limites de ressources avec
--memoryet--cpus
À retenir
Section intitulée « À retenir »- nerdctl remplace Docker CLI avec une compatibilité complète et zéro dépendance à dockerd
- Syntaxe identique :
nerdctl run,nerdctl build,nerdctl composefonctionnent comme Docker - Fonctionnalités avancées : lazy pulling, chiffrement, IPFS, checkpoints non disponibles dans Docker
- Mode rootless : sécurité renforcée avec bypass4netns pour les performances
- Compose intégré : pas besoin d’installer docker-compose séparément
- Bundle complet : nerdctl-full inclut containerd, runc, BuildKit et CNI plugins
- Checkpoints v2.2 : sauvegardez et restaurez l’état des conteneurs avec CRIU
- Manifests multi-arch : créez des images pour plusieurs architectures facilement
Prochaines étapes
Section intitulée « Prochaines étapes »Ressources
Section intitulée « Ressources »- GitHub : containerd/nerdctl
- Documentation : nerdctl docs
- Releases : nerdctl releases
- Stargz snapshotter : containerd/stargz-snapshotter