Recherche de site Web

Que sont les environnements d'exécution des conteneurs ?


Examinez en profondeur les environnements d'exécution des conteneurs afin de comprendre comment les environnements de conteneurs sont créés.

Lors de mon examen des images de conteneurs, j'ai abordé les principes fondamentaux des conteneurs, mais il est maintenant temps d'approfondir les environnements d'exécution des conteneurs afin que vous puissiez comprendre comment les environnements de conteneurs sont créés. Les informations contenues dans cet article sont en partie extraites de la documentation officielle de l'Open Container Initiative (OCI), le standard ouvert pour les conteneurs, ces informations sont donc pertinentes quel que soit votre moteur de conteneur.

Durées d'exécution des conteneurs

Alors, que se passe-t-il réellement dans le backend lorsque vous exécutez une commande telle que la commande podman run ou docker run ? Voici un aperçu étape par étape pour vous :

  1. L'image est extraite d'un registre d'images si elle n'est pas disponible localement
  2. L'image est extraite sur un système de fichiers de copie sur écriture et toutes les couches de conteneur se superposent pour créer un système de fichiers fusionné.
  3. Un point de montage de conteneur est préparé
  4. Les métadonnées sont définies à partir de l'image du conteneur, y compris des paramètres tels que le remplacement de CMD, ENTRYPOINT à partir des entrées utilisateur, la configuration des règles SECCOMP, etc., pour garantir que le conteneur s'exécute comme prévu.
  5. Le noyau est alerté pour attribuer une sorte d'isolation, telle qu'un processus, un réseau et un système de fichiers, à ce conteneur (espaces de noms).
  6. Le noyau est également alerté pour attribuer certaines limites de ressources telles que des limites de CPU ou de mémoire à ce conteneur (groupes de contrôle).
  7. Un appel système (syscall) est transmis au noyau pour démarrer le conteneur
  8. SELinux/AppArmor est configuré

Les environnements d'exécution des conteneurs prennent en charge tout ce qui précède. Lorsque nous pensons aux environnements d'exécution des conteneurs, les éléments qui nous viennent à l'esprit sont probablement runc, lxc, containersd, rkt, cri-o, etc. Eh bien, vous n'avez pas tort. Il s'agit de moteurs de conteneurs et d'environnements d'exécution de conteneurs, chacun étant conçu pour des situations différentes.

Les environnements d'exécution de conteneur se concentrent davantage sur l'exécution de conteneurs, la configuration de l'espace de noms et des groupes de contrôle pour les conteneurs, et sont également appelés environnements d'exécution de conteneur de niveau inférieur. Les environnements d'exécution de conteneurs ou moteurs de conteneurs de niveau supérieur se concentrent sur les formats, le déballage, la gestion et le partage d'images. Ils fournissent également des API aux développeurs.

Initiative de conteneurs ouverts (OCI)

L'Open Container Initiative (OCI) est un projet de la Linux Foundation. Son objectif est de concevoir certaines normes ouvertes ou une structure autour de la façon de travailler avec les environnements d'exécution de conteneurs et les formats d'image de conteneur. Il a été créé en juin 2015 par Docker, rkt, CoreOS et d'autres leaders du secteur.

Pour ce faire, il utilise deux spécifications :

1. Spécification de l'image (image-spec)

L'objectif de cette spécification est de permettre la création d'outils interopérables pour créer, transporter et préparer une image de conteneur à exécuter.

Les composants de haut niveau de la spécification incluent :

  • Manifeste d'image - un document décrivant les éléments qui composent une image de conteneur
  • Index d'images - un index annoté des manifestes d'images
  • Disposition de l'image - une disposition du système de fichiers représentant le contenu d'une image
  • Filesystem Layer - un ensemble de modifications qui décrit le système de fichiers d'un conteneur
  • Configuration de l'image : un document déterminant l'ordre des couches et la configuration de l'image adaptée à la traduction dans un ensemble d'exécution.
  • Conversion - un document expliquant comment cette traduction doit avoir lieu
  • Descripteur : une référence qui décrit le type, les métadonnées et l'adresse du contenu référencé

2. Spécification d'exécution (runtime-spec)

Cette spécification vise à définir la configuration, l'environnement d'exécution et le cycle de vie d'un conteneur. Le fichier config.json fournit la configuration du conteneur pour toutes les plateformes prises en charge et détaille le champ qui permet la création d'un conteneur. L'environnement d'exécution est détaillé ainsi que les actions communes définies pour le cycle de vie d'un conteneur afin de garantir que les applications exécutées à l'intérieur d'un conteneur disposent d'un environnement cohérent entre les exécutions.

La spécification du conteneur Linux utilise diverses fonctionnalités du noyau, notamment les espaces de noms, les groupes de contrôle, les capacités, le LSM et les prisons du système de fichiers pour répondre à la spécification.

Maintenant tu sais

Les environnements d'exécution des conteneurs sont gérés par les spécifications OCI pour assurer la cohérence et l'interopérabilité. De nombreuses personnes utilisent des conteneurs sans avoir besoin de comprendre leur fonctionnement, mais comprendre les conteneurs constitue un avantage précieux lorsque vous devez dépanner ou optimiser la façon dont vous les utilisez.

Cet article est basé sur un article de Techbeatly et a été adapté avec autorisation.

Articles connexes: