Qu'est-ce qu'un conteneur?


Réponses:


18

La toute première chose à savoir sur un conteneur est:

C'est avant tout un processus.

Une fois cela compris, on peut commencer à comprendre comment les conteneurs se comparent et contrastent avec les machines virtuelles. Les conteneurs et les machines virtuelles partagent tous deux l' isolement de leurs hôtes. La méthode d'isolement est la différence critique.

Les processus conteneurs utilisent des extensions de l'hôte du noyau du système d'exploitation sur lequel ils s'exécutent pour s'isoler des autres processus. D'autres extensions assurent également l'isolation des disques et des ressources. Les conteneurs partagent leur noyau et leur mémoire avec le système d'exploitation hôte.

Les machines virtuelles utilisent un hyperviseur pour isoler les machines virtuelles de leurs hôtes. Il s'agit d'une couche de logiciel qui transfère les demandes de ressources des «invités» (VM) au matériel. L'isolation du disque est fournie par la virtualisation de disque. Les VM ne partagent pas de noyau avec l'hôte - elles chargent leurs propres noyaux dans l'espace mémoire dédié à la VM.

Un impact important de cette différence est qu'un conteneur doit être compatible avec le noyau de son hôte. Par exemple, il n'est pas possible d'exécuter un conteneur basé sur Windows Nano Server sur un hôte Linux ou un conteneur Ubuntu directement sur un hôte Windows. Les machines virtuelles, en revanche, peuvent exécuter n'importe quel noyau, quel que soit le système d'exploitation hôte. Lors de l'exécution d'un conteneur Linux sur un hôte Windows, Docker exécute le conteneur dans une machine virtuelle Linux.

Les différences opérationnelles résident dans l'agilité: les conteneurs démarrent et s'arrêtent à peu près aussi rapidement qu'un processus normal. Les machines virtuelles sont «plus lourdes», nécessitant des ressources dédiées qui leur sont réservées et prennent plus de temps pour démarrer et s'arrêter.

Les conteneurs offrent une grande flexibilité à un modèle d'exploitation DevOps:

  • Les conteneurs isolent les dépendances des composants logiciels. Les développeurs peuvent utiliser des conteneurs pour garantir qu'un module d'application fonctionnera aussi bien sur leurs machines de développement que dans QA / UA / Production
  • Les conteneurs utilisent un réseau défini par logiciel pour communiquer
  • Les définitions de conteneur sont déclaratives et peuvent être contrôlées par la source
  • Les systèmes de gestion de conteneurs (Kubernetes, DC / OS, Swarm) peuvent gérer les pools de ressources matérielles (calcul / RAM / stockage) et faire évoluer dynamiquement les conteneurs

1
Je fais aussi votre 3 dernière puce sur vSphere, grâce à vagrant :)
Tensibai

8

Le mot conteneur fait référence à une technologie de virtualisation légère disponible sur les noyaux Linux modernes, cette technologie est très similaire aux prisons FreeBSD.

Un noyau Linux plus ancien, sans conteneur, est capable d'exécuter des processus simultanément. Certains attributs du système sont privés à traiter, comme l'environnement de processus ou la mémoire de processus: seuls le processus possédant ces attributs et le système d'exploitation lui-même peuvent accéder à ces données. (Il y a beaucoup d'échappatoires, comme certaines implémentations ps , mais c'est essentiellement vrai!) Certains autres attributs sont partagés entre les processus, comme le système de fichiers et les interfaces réseau par exemple.

Un noyau Linux moderne, capable de contenir des conteneurs, est capable de gérer plus d'attributs du système en tant que données privées associées à un processus ou à un groupe de processus. Le contexte résultant est un conteneur et au lieu d'exécuter un programme dans les «conteneurs initiaux» en utilisant le système de fichiers et les interfaces réseau initialisées par le système d'exploitation, il est possible d'exécuter des processus dans d'autres conteneurs, afin qu'ils voient un système de fichiers différent et un liste différente des interfaces réseau. Par conséquent, deux processus s'exécutant dans des conteneurs distincts partagent uniquement le noyau. Vous connaissez peut-être la commande chroot qui peut exécuter un processus dans une hiérarchie de fichiers distincte, les conteneurs poussent l'idée un peu plus loin.

Bien sûr, ce n'est qu'une explication très grossière, mais j'espère que cela aidera à clarifier l'idée de ce que sont les conteneurs. Maintenant, à quoi servent-ils?

Une interface populaire pour les capacités de conteneur des noyaux Linux est implémentée par docker, un utilitaire de ligne de commande qui peut être utilisé pour produire des artefacts représentant des systèmes de fichiers ( images de docker ) et exécuter des processus dans des conteneurs où ces systèmes de fichiers sont accessibles. Cette suite logicielle est également capable de créer des systèmes de réseautage virtuel ad hoc pour permettre à plusieurs conteneurs de communiquer sur un réseau privé.

Les technologies basées sur des conteneurs sont pratiques pour:

  • Décrire les déploiements complexes évolutifs .
  • Fournissez aux développeurs d'applications un environnement très similaire à l'environnement de production.
  • Implémentez un modèle de serveur immuable, car les artefacts logiciels décrivent généralement un système d'exploitation complet, pas seulement un package d'application.

(Comme vous semblez familier avec d'autres technologies de virtualisation comme Virtual Box, vous remarquerez peut-être que ces technologies peuvent également répondre aux trois points ci-dessus. De nos jours, il existe un éventail assez restreint de technologies de virtualisation, et nous pouvons comparer la question de leur popularité dans certains contextes avec la popularité des langages informatiques: cela dépend probablement des mérites techniques de chaque solution individuelle, mais aussi de beaucoup de facteurs que je qualifierai de «chance».)


1
N'est plus limité à Linux, Windows 16 a le même genre de capacité
Tensibai

1
Lien pour prendre en charge ma réclamation docs.microsoft.com/en-us/virtualization/windowscontainers/…
Tensibai

7

Habituellement, les conteneurs font référence à quelque chose comme les conteneurs dockers qui ont popularisé le nom

Je cite là de la définition de docker:

À l'aide de conteneurs, tout ce qui est nécessaire pour exécuter un morceau de logiciel est conditionné dans des conteneurs isolés. Contrairement aux machines virtuelles, les conteneurs ne regroupent pas un système d'exploitation complet - seules les bibliothèques et les paramètres requis pour faire fonctionner le logiciel sont nécessaires.

La dénomination racine vient des conteneurs linux (lxc) dont le but était d'isoler un processus de son système hôte, le premier objectif était d'éviter la compromission du processus pour reprendre le système hôte.

Maintenant, ils sont utilisés dans un cadre plus large. Dans une définition de `` conteneur '' moderne, vous allez plus ou moins publier un package pour l'exécution qui inclut déjà votre application, c'est le middleware sous-jacent si nécessaire et toutes les bibliothèques nécessaires et assurez-vous qu'il fonctionnera sur n'importe quel système compatible.

Le deuxième avantage est qu'il permet d'utiliser plusieurs applications avec la même dépendance à différentes versions sans avoir à modifier fortement ses variables d'environnement afin de charger la bonne.

Peu probable pour un système VM comme une machine virtuelle de boîte virtuelle ou une instance EC2 sur AWS, les conteneurs sont virtuels uniquement au niveau du système de fichiers et isolés uniquement sur la pile de mémoire. Ils partagent toujours le même hôte et le système d'exploitation sous eux arbitrera les ticks du processeur.

Une machine virtuelle est virtuelle au niveau matériel, et vous exécutez un système d'exploitation à l'intérieur, un conteneur est virtuel au niveau du système d'exploitation et vous exécutez un processus à l'intérieur.


1
Hm, donc quelque chose comme une image VirtualBox (ou quoi que ce soit qui est appelé dans VirtualBox) pourrait également être considéré comme un "conteneur", ou je ne le comprends pas?
Pierre.Vriens

Vu que j'avais oublié une partie de la question, a ajouté la différence tout en prolongeant la réponse.
Tensibai

3

D'après la définition d'AWS :

Les conteneurs sont une méthode de virtualisation du système d'exploitation qui vous permet d'exécuter une application et ses dépendances dans des processus isolés de ressources. Les conteneurs vous permettent de regrouper facilement le code, les configurations et les dépendances d'une application dans des blocs de construction faciles à utiliser qui assurent la cohérence environnementale, l'efficacité opérationnelle, la productivité des développeurs et le contrôle des versions. Les conteneurs peuvent aider à garantir que les applications se déploient rapidement, de manière fiable et cohérente quel que soit l'environnement de déploiement. Les conteneurs vous offrent également un contrôle plus granulaire des ressources, ce qui améliore l'efficacité de votre infrastructure.

La conteneurisation rassemble toutes les nécessités essentielles nécessaires pour effectuer une tâche / un environnement particulier afin qu'elle soit autosuffisante et puisse être exécutée sur n'importe quelle plate-forme, ce qui enlève beaucoup de douleur quand il s'agit de configurer et d'installer des choses.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.