Il existe des questions sur les conteneurs , telles que:
- Quel rôle jouent les outils de gestion de la configuration dans une infrastructure immuable?
- Quels problèmes une orchestration de conteneurs résout-elle?
- Conteneurs CI / CD simples dans AWS
Mes questions :
- Qu'est-ce qu'un "conteneur" (dans le contexte de DevOps)?
- Pourquoi sont-ils utilisés?
terminology
containers
Pierre.Vriens
la source
la source
Réponses:
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:
la source
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:
(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».)
la source
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:
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.
la source
D'après la définition d'AWS :
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.
la source