1) Connaissances de base sur Containerd
À partir de la version 1.11 de Docker, l'exécution des conteneurs Docker n'est pas simplement lancée par Docker Daemon, mais en intégrant plusieurs composants tels que containerd et runc.
Bien que le module démon Docker Daemon soit constamment refactorisé, les fonctions de base et le positionnement n'ont pas beaucoup changé. Il s'agit toujours d'une architecture CS. Le démon est responsable de l'interaction avec le client Docker et de la gestion des images et des conteneurs Docker.
Le composant containerd dans l'architecture actuelle est responsable de la gestion du cycle de vie des conteneurs sur les nœuds du cluster et fournit au démon Docker une interface gRPC.
Containerd-shim est un plugin pour Containerd, qui est utilisé pour agir en tant que gestionnaire de processus, recevoir des commandes de containerd et créer et gérer des processus à l'intérieur du conteneur. Il peut fonctionner avec Runc afin que les opérations telles que la création, le démarrage, l'arrêt, la suspension et la reprise des conteneurs puissent être gérées efficacement. En un mot, la création de conteneurs est réalisée par Containerd-shim.
Nous savons tous que la création d'un conteneur nécessite une certaine configuration des espaces de noms et des groupes de contrôle, ainsi que l'opération de montage du système de fichiers racine. En fait, ces opérations ont déjà des spécifications standard, c'est-à-dire OCI (Open Container Standard).
OCI est essentiellement un document de spécification, qui stipule principalement la norme de structure de l'image du conteneur et la norme du conteneur recevant des instructions d'opération, telles que créer, démarrer, arrêter, supprimer et d'autres commandes. En fait, Runc implémente le conteneur de gestion selon différentes spécifications de cet OCI.
Ainsi, le conteneurd-shim est utilisé pour appeler runc pour démarrer le conteneur. Après avoir exécuté le conteneur, runc se terminera directement et containerd-shim deviendra le processus parent du processus de conteneur. Il est responsable de la collecte de l'état du processus de conteneur Et après la sortie du processus avec le pid 1 dans le conteneur, il reprendra le processus enfant dans le conteneur pour le nettoyer, afin de s'assurer qu'aucun processus zombie n'apparaîtra.
Containerd est un environnement d'exécution de conteneur standard qui met l'accent sur la simplicité, la robustesse et la portabilité. containerd peut être responsable des éléments suivants :
-
Gérer le cycle de vie des conteneurs (de la création à la destruction)
-
Tirer/pousser les images de conteneurs
-
Gestion du stockage (gérer le stockage des données d'image et de conteneur)
-
Appelez runc pour exécuter le conteneur (interagissez avec les runtimes de conteneur tels que runc)
-
Gérer les interfaces réseau et les réseaux de conteneurs
2) installation en conteneur
Les étapes suivantes consistent à installer containerd sur Rocky8/RHEL8
Installez d'abord l'outil yum-utils
yum install -y yum-utils
Configurez l'entrepôt yum officiel de Docker, si vous l'avez fait, vous pouvez l'ignorer
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Installer le conteneur
yum install containerd.io -y
Démarrez le service et configurez-le pour qu'il démarre automatiquement au démarrage
systemctl enable containerd
systemctl start containerd
3) outil de ligne de commande containerd ctr
Ctr est l'outil de ligne de commande de containerd, qui peut être utilisé pour exécuter et gérer des tâches dans containerd. ctr est principalement utilisé pour le développement et le débogage, pas dans un environnement de production. L'utilisation courante est la suivante :
Vérifier la version du conteneur
ctr version
tirer l'image
ctr images pull docker.io/library/busybox:latest #其中images可以简写为i
Lister les miroirs locaux
ctr images list #或者简写
ctr i ls
modifier la balise
ctr i tag docker.io/library/busybox:latest busybox:latest
supprimer le miroir
ctr i rm docker.io/library/busybox:latest
exécuter le conteneur
ctr run -d busybox:latest busybox
Répertorier les conteneurs en cours d'exécution
ctr containers list #或者简写为
ctr c ls
Lister les tâches
ctr tasks ls #或者简写
ctr t ls
Exécuter des commandes dans le conteneur
ctr t exec --exec-id 1860 busybox ls #1860为任务ID
dans le conteneur
ctr t exec -t --exec-id 1860 busybox sh
Supprimer le conteneur
ctr t kill -s SIGKILL busybox #先杀掉进程
ctr c rm busybox #再删除容器
En bref, il existe encore de nombreuses différences entre cet outil ctr et l'outil de ligne de commande de docker.