GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Docker vs containerd vs CRI-O :une comparaison approfondie

Présentation

Le déploiement de conteneurs est une méthode pratique pour garantir la portabilité, l'évolutivité et l'agilité dans le monde DevOps. Des tests à la production, les conteneurs facilitent l'ensemble du processus de développement logiciel.

Les plates-formes de gestion et d'orchestration des conteneurs sont conçues pour être intuitives et simples pour l'utilisateur final. Cependant, les plates-formes elles-mêmes sont complexes et consistent en plusieurs projets coordonnés.

Cet article explique les différences entre trois éléments importants de l'écosystème de gestion des conteneurs :Docker, containerd et CRI-O.

L'écosystème des conteneurs

Docker et Kubernetes sont deux plateformes de premier plan dans l'écosystème des conteneurs. Pour assurer l'interopérabilité, la communauté s'est mise d'accord sur plusieurs standards.

Les deux normes les plus importantes sont :

  • IRC - Interface d'exécution du conteneur. Cela permet à Kubernetes d'être compatible avec différents runtimes de conteneurs, y compris le containerd de Docker. .
  • OCI - Initiative de conteneurs ouverts. Il standardise les images de conteneur et les runtimes.

L'infographie ci-dessous montre comment CRI et OCI aident à connecter Kubernetes à Docker :

Docker

Docker est un ensemble de projets de gestion de conteneurs gérés par la société appelée Docker. Ces projets fonctionnent ensemble pour fournir une plate-forme complète pour le déploiement de conteneurs.

Les projets les plus importants sont :

  • CLI docker - Un programme d'interface de ligne de commande. Les utilisateurs créent et gèrent des conteneurs Docker en émettant des commandes Docker CLI.
  • conteneur - Un démon qui écoute les commandes de l'utilisateur. Il extrait et stocke les images demandées et contrôle le cycle de vie du conteneur.
  • exécuterC - Un environnement d'exécution de conteneur léger et portable. runC est un composant de bas niveau qui intègre les composants nécessaires à Docker pour interagir avec le système local. Les conteneurs créés par cet outil sont compatibles OCI.

Images Docker

Une image Docker est un modèle en lecture seule qui contient le code de l'application, ainsi que les bibliothèques, outils et autres dépendances nécessaires au bon fonctionnement de l'application. Lorsqu'un utilisateur émet la commande d'exécution dans Docker, le modèle d'image est utilisé pour déployer un conteneur d'application.

Les images Docker sont créées à l'aide de Dockerfile, un document texte contenant les informations d'image nécessaires. La build La commande utilise Dockerfile et un contexte pour créer l'image.

Docker pour Kubernetes

Container Runtime Interface est un plug-in qui permet à Kubernetes de communiquer avec d'autres environnements d'exécution de conteneurs. Cependant, étant donné que Docker n'implémente pas le CRI, Kubernetes a introduit une couche de compatibilité appelée dockershim . Cette couche relie les deux API.

Depuis la version 1.23, Kubernetes exige que les runtimes soient compatibles avec l'IRC. Cela signifie que dockershim est désormais obsolète et que Docker Engine n'est plus pris en charge en tant qu'environnement d'exécution. Cependant, Kubernetes peut toujours communiquer avec Docker via containerd, qui peut être conforme au CRI avec un plugin.

Interface d'exécution de conteneur (CRI)

Bien que Kubernetes soit une plate-forme d'orchestration de conteneurs, au niveau le plus bas, il doit également créer et gérer des conteneurs. Pour ce faire, Kubernetes utilise des runtimes de conteneurs.

Au début, Docker Engine était le seul environnement d'exécution disponible sur la plate-forme. Mais la popularité de la conteneurisation a entraîné des solutions concurrentes et la nécessité pour Kubernetes de toutes les prendre en charge. Avec l'interface d'exécution de conteneur plugin, Kubernetes peut communiquer avec tous les principaux runtimes.

conteneur

containerd est une solution d'exécution conçue par Docker. Ce démon est disponible pour les systèmes d'exploitation Linux et Windows. Dans le cadre du projet Docker, containerd gère le transfert et le stockage des images, ainsi que la création, l'exécution et la supervision des conteneurs.

Kubernetes n'a pas besoin de toute la plate-forme Docker pour utiliser containerd. Avec le plug-in de compatibilité CRI, Kubernetes et containerd peuvent communiquer directement.

CRI-O

CRI-O est une implémentation légère compatible OCI du CRI. Il a été créé comme une alternative à Docker Engine.

Avec CRI-O, vous pouvez démarrer des pods Kubernetes et extraire les images nécessaires. Cependant, ce n'est pas un runtime. Au lieu de cela, il est utilisé pour lancer d'autres runtimes compatibles OCI de bas niveau, tels que runC ou Kata.

Initiative sur les conteneurs ouverts (OCI)

Docker et d'autres acteurs importants de l'industrie des conteneurs ont créé l'Open Container Initiative (OCI) en 2015. L'OCI vise à créer des normes pour les formats et les durées d'exécution des conteneurs. Actuellement, l'OCI a deux spécifications :

  • spécification de l'image - la spécification d'image qui explique comment créer une image conforme à l'OCI.
  • spécification d'exécution - la spécification d'exécution pour décompresser le bundle du système de fichiers.

exécuterC

runC est un environnement d'exécution de conteneur universel créé par Docker. Bien qu'il fasse partie de l'ensemble d'outils Docker, il ne nécessite pas la plate-forme Docker pour s'exécuter.

Certaines fonctionnalités importantes de runC sont :

  • Prise en charge complète des espaces de noms Linux.
  • Prise en charge native des fonctionnalités de sécurité Linux, telles qu'AppArmor, SELinux, etc.
  • Prise en charge native des conteneurs Windows 10.
  • Les conteneurs créés et gérés par runC sont conformes à l'OCI.

Docker
  1. Installer ModSecurity avec Apache dans un conteneur Docker

  2. Quelques commandes DOCKER

  3. Une introduction à Docker

  4. Qu'est-ce que containerd et quel est son lien avec Docker et Kubernetes ?

  5. Comment attribuer une adresse IP statique à un conteneur Docker

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Comment configurer un conteneur Apache Docker

Comment exécuter des conteneurs Docker

Que faire si un conteneur Docker se ferme immédiatement

Utiliser Docker Desktop pour gérer un conteneur